Fragment组件怎么用
这篇文章主要介绍“Fragment组件怎么用”,在日常操作中,相信很多人在Fragment组件怎么用问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Fragment组件怎么用”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
一、Fragment与Activity的关系
要理解动态管理Fragment首先要理解一下Fragment与Activity的关系
Fragment可以理解为将Activity划分为若干个片段,Fragment是Activity的一部分,生命周期是依赖Activity的,是不能单独存在的。这样不难理解所有Fragment的管理(查找、添加、删除、替换)都应该在Fragment所依赖的Activity中进行,也就是Activity才是Fragment交互的场所,不要试图在一个Fragment中去管理另一个Fragment虽然也可以实现要求的功能但是不符合规范的。要完成对Fragment的具体操作需要使用FragmentManager组件。
二、使用FragmentManager组件
使用FragmentManager组件的关键代码如下:
//1、创建FragmentManager组件FragmentManagerfm=super.getSupportFragmentManager();//2、查询方法,获得Activity中某一个Fragmentfm.findFragmentById(R.id.fooler)fm.findFragmentByTag(”tagName”)//3、动态添加Fragmentfm.beginTransaction().add(R.id.content,contentFragment,"content").commit();//4、替换Fragmentfm.beginTransaction().replace(R.id.OldFragment,newFragment).commit();//5、删除Fragmentfm.beginTransaction().remove(R.id.myFragment).commit();//6、向Fragment传递数据f.setArguments(Bundle)方法传递数据
上述管理Fragment代码应组织在Fragment所属的Activity中去,下面就通过一个案例来看看具体实现.
三、实现案例
首先看一下本次的应用案例(如图所示),当单击底部***个区域和第二区域时实现中心区域的切换
界面分析:有三个区域 :头部区域TitleFragment,中心区域是一个FrameLayout布局通过代码动态加载ContentFragment,底部区域FloorFragment
1、Activity的布局如下
RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"><fragmentandroid:id="@+id/fgTitle"android:layout_width="match_parent"android:layout_height="45dp"android:name="com.jereh.android.course.fragment.TitleFragment"/><FrameLayoutandroid:id="@+id/content"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_below="@id/fgTitle"/><fragmentandroid:id="@+id/floor"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_alignParentBottom="true"android:orientation="horizontal"android:name="com.jereh.android.course.fragment.FloorFragment"/></RelativeLayout>复制代码2、FloorFragment代码复制代码publicclassFloorFragmentextendsFragmentimplementsOnClickListener{@OverridepublicvoidonAttach(Activityactivity){super.onAttach(activity);}@OverridepublicViewonCreateView(LayoutInflaterinflater,ViewGroupcontainer,BundlesavedInstanceState){//TODOAuto-generatedmethodstubViewview=inflater.inflate(R.layout.floor_fragment,container,false);LinearLayouthome=(LinearLayout)view.findViewById(R.id.home);LinearLayoutlist=(LinearLayout)view.findViewById(R.id.list);home.setOnClickListener(this);list.setOnClickListener(this);returnview;}//定义接口,该接口在Activity中去实现,降低Activity与Fragment的耦合度publicinterfaceOnContentFragmentListener{voidsetContentFragment(Stringparam);}privateOnContentFragmentListeneronContentFragmentListener;publicvoidsetOnContentFragmentListener(OnContentFragmentListeneronContentFragmentListener){this.onContentFragmentListener=onContentFragmentListener;}@OverridepublicvoidonClick(Viewview){//TODOAuto-generatedmethodstubif(onContentFragmentListener!=null){switch(view.getId()){caseR.id.home://回调机制,调用实现类的方法onContentFragmentListener.setContentFragment("主面板Fragment");break;caseR.id.list:onContentFragmentListener.setContentFragment("列表信息");break;}}}}3、ContentFragment代码
publicclassContentFragmentextendsFragment{privateStringtitle;publicvoidsetArguments(Bundleargs){title=args.getString("title");}@OverridepublicViewonCreateView(LayoutInflaterinflater,ViewGroupcontainer,BundlesavedInstanceState){Viewview=inflater.inflate(R.layout.content_fragment,container,false);if(title!=null)((TextView)view.findViewById(R.id.tvContent)).setText(title);returnview;}}
4、DynaFragmentActivity代码
publicclassDynaFragmentActivityextendsFragmentActivityimplementsFloorFragment.OnContentFragmentListener{privateContentFragmentcontentFragment;privateFloorFragmentfloor;@OverrideprotectedvoidonCreate(BundlesavedInstanceState){super.onCreate(savedInstanceState);super.setContentView(R.layout.dyna_fragment_activity);initFragment();}privatevoidinitFragment(){floor=(FloorFragment)super.getSupportFragmentManager().findFragmentById(R.id.floor);floor.setOnContentFragmentListener(this);//注册侦听,传入实现类对象contentFragment=newContentFragment();FragmentManagerfm=super.getSupportFragmentManager();fm.beginTransaction().add(R.id.content,contentFragment,"content").commit();}publicvoidsetFragment(Fragmentfragment){getSupportFragmentManager().beginTransaction().replace(R.id.content,fragment).commit();}@OverridepublicvoidsetContentFragment(Stringparam){//TODOAuto-generatedmethodstubBundlebundle=newBundle();bundle.putString("title",param);contentFragment=newContentFragment();contentFragment.setArguments(bundle);super.getSupportFragmentManager().beginTransaction().replace(R.id.content,contentFragment).commit();}}
到此,关于“Fragment组件怎么用”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注恰卡编程网网站,小编会继续努力为大家带来更多实用的文章!