深入剖析Android动态管理Fragment:《这些组件你知道吗?》Fragment,Fragment是Activity的一部分,生命周期依赖于Activity,不能单独存在。不难理解,所有的Fragment管理(查找、添加、删除、替换)都应该在Fragment所依赖的Activity中进行,即Activity是Fragment交互的地方。不要试图在一个片段中管理另一个片段。也可能实现了要求的功能,但不符合规范。要完成对Fragment的具体操作,需要使用FragmentManager组件。2.使用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中。下面通过一个案例来看看具体实现。当点击底部第一区和第二区时,实现中心区的切换界面分析:一共有三个区域:头部区域的标题区,中心区是一个FrameLayout布局,内容fragment由代码动态加载,底部区域FloorFragment1和Activity的布局RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent">复制代码2、FloorFragment代码复制代码publicclassFloorFragmenttextendsFragmentimplementsOnClickListener)tactivityOverridepublicvoidonActivity{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);家.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://回调机制,调用实现类MethodonContentFragmentListener.setContentFragment("主面板Fragment");break;caseR.id.list:onContentFragmentListener.setContentFragment("列表信息");break;}}}}3.ContentFragment代码publicclass内容FragmenttextendsFragment{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;@OverrideprotectedBundlesavonCreate){Statesuperfragmentfloor.onCreate(savedInstanceState);super.setContentView(R.layout.dyna_fragment_activity);initFragment();}privatevoidinitFragment(){floor=(FloorFragment)super.getSupportFragmentManager().findFragmentById(R.id.floor);floor.setOnContentFragmentListener(这);//注册侦听,传入现实类对象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();}}