Fragment

  • fragment的作用
    它的出现是为了解决Android碎片化 ,它可作为Activity界面的组成部分,可在Activity运行中实现动态地加入、移除和交换。一个Activity中可同时出现多个Fragment,一个Fragment也可在多个Activity中使用。

  • fragment的生命周期

    Fragment_第1张图片
    onAttach()当Fragment和Activity建立关联时调用
    onCreateView() 当Fragment创建视图时调用

public View onCreateView(final LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.frag_movie, container, false);

        return view;
    }
}

onActivityCreated() 当与Fragment相关联的Activity完成onCreate()之后调用
onDestroyView() 在Fragment中的布局被移除时调用
onDetach() 当Fragment和Activity解除关联时调用

  1. 打开含有fragment的activity
    fragment: onCreate() --> fragment: onCreateView() --> activity: onCreate() --> fragment: onActivityCreated() --> Activity onStart() --> fragment: onStart() --> activity: onResume() --> fragment: onResume()
  2. 按下home
    fragment: onPause() --> activity: onPause() --> fragment: onStop() --> activity: onStop()
  3. 重新启动
    activity: onRestart() --> activity: onStart() --> fragment: onStart() --> activity: onResume() --> fragment: onResume()
  4. back
    fragment: onPause() --> activity: onPause() --> fragment: onStop() --> activity: onStop --> fragment: onDestoryView() --> fragment: onDestory() --> fragment: onDetach() --> activity: onDestory()

Fragment生命周期与Activity生命周期的一个关键区别就在于,Fragment的生命周期方法是由托管Activity而不是操作系统调用的。Activity中生命周期方法都是protected,而Fragment都是public.

  • 动态加载fragment
    新建一个fragment类继承Fragment:
public class MyFragment extends Fragment{
    
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
            Bundle savedInstanceState) {
        /**
         * 加载布局文件然后返回view,显示在Activity
         */
        View view = inflater.inflate(R.layout.title, container,false);
        return view;
    }
}

activity中绑定

        MyFragment fragment = new MyFragment();
        FragmentManager manager = getSupportFragmentManager();
        FragmentTransaction transaction = manager.beginTransaction();
        transaction.add(R.id.fragmentLayout, fragment);//放入activity的layout中,可以只是个空的LinearLayout
        transaction.commit();

第一步,先用getFragmentManager()方法获取一个FragmentManager对象,再通过它的beginTransaction()获取一个FragmentTransaction的实例。

第二步,用beginTransaction.add()方法通过id将MyFragemnt实例添加到main布局里LinearLayout里。一定要注意,add()方法里的第一个参数是容器视图资源Id,而不是layout。容器视图资源Id有两个作用:告知FragmentManager,碎片视图应该出现在活动视图的什么地方;它也是FragmentManager队列中碎片的唯一标识符。而静态加载时碎片的唯一标识符正是在活动布局里< fragment>下的id。
第三步:调用beginTransaction.commit()提交。另外,如果允许用户通过按下返回按键返回到前一个Fragment状态,在调用commit()之前先调用addToBackStack(true)方法。

  • Fragment与Activity之间通信
MyFragment myFragment = (MyFragment)fragmentManager(). findFragmentById(R.id.fragmentLayout);
  • Fragment之间通信
    getActivity()

你可能感兴趣的:(Fragment)