一、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中某一个Fragment
 - fm.findFragmentById(R.id.fooler)
 - fm.findFragmentByTag(”tagName”)
 - //3、动态添加Fragment
 - fm.beginTransaction().add(R.id.content,contentFragment,"content").commit();
 - //4、替换Fragment
 - fm.beginTransaction().replace(R.id.OldFragment, newFragment).commit();
 - //5、删除Fragment
 - fm.beginTransaction().remove(R.id.myFragment).commit();
 - //6、向Fragment传递数据
 - f.setArguments(Bundle )方法传递数据
 
上述管理Fragment代码应组织在Fragment所属的Activity中去,下面就通过一个案例来看看具体实现.
三、实现案例
首先看一下本次的应用案例(如图所示),当单击底部***个区域和第二区域时实现中心区域的切换
界面分析:有三个区域 :头部区域TitleFragment,中心区域是一个FrameLayout布局通过代码动态加载ContentFragment,底部区域FloorFragment
1、Activity的布局如下
3、ContentFragment代码
- RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 - android:layout_width="match_parent"
 - android:layout_height="match_parent">
 - android:layout_width="match_parent"
 - android:layout_height="45dp"
 - android:name="com.jereh.android.course.fragment.TitleFragment"
 - />
 - android:layout_width="match_parent"
 - android:layout_height="match_parent"
 - android:layout_below="@id/fgTitle"
 - />
 - 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"
 - />
 - 复制代码
 - 2、FloorFragment代码
 - 复制代码
 - public class FloorFragment extends Fragment implements OnClickListener {
 - @Override
 - public void onAttach(Activity activity) {
 - super.onAttach(activity);
 - }
 - @Override
 - public View onCreateView(LayoutInflater inflater, ViewGroup container,
 - Bundle savedInstanceState) {
 - // TODO Auto-generated method stub
 - View 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;
 - }
 - //定义接口,该接口在Activity中去实现,降低Activity与Fragment的耦合度
 - public interface OnContentFragmentListener{
 - void setContentFragment(String param);
 - }
 - private OnContentFragmentListener onContentFragmentListener;
 - public void setOnContentFragmentListener(
 - OnContentFragmentListener onContentFragmentListener) {
 - this.onContentFragmentListener = onContentFragmentListener;
 - }
 - @Override
 - public void onClick(View view) {
 - // TODO Auto-generated method stub
 - if(onContentFragmentListener!=null){
 - switch(view.getId()){
 - case R.id.home:
 - //回调机制,调用实现类的方法
 - onContentFragmentListener.setContentFragment("主面板Fragment");
 - break;
 - case R.id.list:
 - onContentFragmentListener.setContentFragment("列表信息");
 - break;
 - }
 - }
 - }
 - }
 
- public class ContentFragment extends Fragment {
 - private String title;
 - public void setArguments(Bundle args) {
 - title=args.getString("title");
 - }
 - @Override
 - public 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代码
- public class DynaFragmentActivity extends FragmentActivity implements FloorFragment.OnContentFragmentListener {
 - private ContentFragment contentFragment;
 - private FloorFragment floor;
 - @Override
 - protected void onCreate(Bundle savedInstanceState) {
 - super.onCreate(savedInstanceState);
 - super.setContentView(R.layout.dyna_fragment_activity);
 - initFragment();
 - }
 - private void initFragment(){
 - floor=(FloorFragment)super.getSupportFragmentManager().findFragmentById(R.id.floor);
 - floor.setOnContentFragmentListener(this);//注册侦听,传入实现类对象
 - contentFragment=new ContentFragment();
 - FragmentManager fm=super.getSupportFragmentManager();
 - fm.beginTransaction().add(R.id.content,contentFragment,"content").commit();
 - }
 - public void setFragment(Fragment fragment){
 - getSupportFragmentManager().beginTransaction().replace(R.id.content, fragment).commit();
 - }
 - @Override
 - public void setContentFragment(String param) {
 - // TODO Auto-generated method stub
 - Bundle bundle=new Bundle();
 - bundle.putString("title", param);
 - contentFragment=new ContentFragment();
 - contentFragment.setArguments(bundle);
 - super.getSupportFragmentManager().beginTransaction()
 - .replace(R.id.content, contentFragment).commit();
 - }
 - }
 
Copyright © 2009-2022 www.wtcwzsj.com 青羊区广皓图文设计工作室(个体工商户) 版权所有 蜀ICP备19037934号