深入分析动态管理Fragment

一、Fragment与Activity的关系

  要理解动态管理Fragment首先要理解一下Fragment与Activity的关系

  Fragment可以理解为将Activity划分为若干个片段,Fragment是Activity的一部分,生命周期是依赖Activity的,是不能单独存在的。这样不难理解所有Fragment的管理(查找、添加、删除、替换)都应该在Fragment所依赖的Activity中进行,也就是Activity才是Fragment交互的场所,不要试图在一个Fragment中去管理另一个Fragment虽然也可以实现要求的功能但是不符合规范的。要完成对Fragment的具体操作需要使用FragmentManager组件。

二、使用FragmentManager组件

  使用FragmentManager组件的关键代码如下:

//1、创建FragmentManager组件FragmentManager fm=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的布局如下

android:layout_width="match_parent"android:layout_heightandroid:layout_width="match_parent"android:layout_height="45dp"android:nameandroid:layout_width="match_parent"android:layout_height="match_parent"android:layout_belowandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_alignParentBottom="true"android:orientation="horizontal"android:name

2、FloorFragment代码

public class FloorFragment extends Fragment implements OnClickListener {@Overridepublic void onAttach(Activity activity) {super.onAttach(activity);}@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {// TODO Auto-generated method stubView view=inflater.inflate(R.layout.floor_fragment, container,false);LinearLayout home=(LinearLayout)view.findViewById(R.id.home);LinearLayout list=(LinearLayout)view.findViewById(R.id.list);home.setOnClickListener(this);list.setOnClickListener(this);return view;} OnContentFragmentListener{void setContentFragment(String param);}private OnContentFragmentListener onContentFragmentListener;public void setOnContentFragmentListener(OnContentFragmentListener onContentFragmentListener) {this.onContentFragmentListener = onContentFragmentListener;}@Overridepublic void onClick(View view) {(onContentFragmentListener!=null){switch(view.getId()){case R.id.home://回调机制,调用实现类的方法onContentFragmentListener.setContentFragment("主面板Fragment");break;case R.id.list:onContentFragmentListener.setContentFragment("列表信息");break;}}}}

3、ContentFragment代码

public class ContentFragment extends Fragment {private String title;public void setArguments(Bundle args) {title=args.getString("title");}@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {View view=inflater.inflate(R.layout.content_fragment, container,false);if(title!=null)((TextView)view.findViewById(R.id.tvContent)).setText(title);return view;}}

4、DynaFragmentActivity代码世上没有绝望的处境,只有对处境绝望的人。

深入分析动态管理Fragment

相关文章:

你感兴趣的文章:

标签云: