一,为什么被称为第五大组件
有自己生命周期,但是必须依附activity
1,fragment加载到activity的两种方式
动态:
通过fragmentTransaction:
fragmentManager=getSupportFragmentManager();
fragmentTransaction=fragmentManager.beginTransaction();
switch (v.getId()){
case R.id.fragement001:
Log.i(Tag,"点击了001");
if(null==fragment001){
fragment001=new Fragment001();
}
fragmentTransaction.replace(R.id.viewid,fragment001);
break;
case R.id.fragement002:
Log.i(Tag,"点击了002");
if(null==fragment002){
fragment002=new Fragment002();
}
fragmentTransaction.replace(R.id.viewid,fragment002);
break;
}
fragmentTransaction.commit();
或者通过FragmentPagerAdapter或FragmentStatePagerAdapter
静态:直接在activity的布局文件中写入fragment
<fragment
android:id="@+id/f001"
android:name="com.example.fragmentdemo.fragment.Fragment001"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
2,FragmentPagerAdapter与FragmentStatePagerAdapter的区别
根据两个类的destroyItem方法判断,前者调用detach()方法,后者调用remove()方法。所以:
前者适合页面较少,不会remove掉fragment,只会detach,并不是回收内存,只是fragment和activity的UI分离。
后者适合页面较多,回收内存,更节省内存。当切换页面时,FragmentStatePagerAdapter会remove之前加载的fragment从而将内存释放掉。
二,生命周期
setUserVisibleHit():设置可见或不可见,可通过调用getUserVisibleHint()获得Fragment状态。
1,activity:created
onAttach(): fragment与activity已完全绑定
onCreate(): 初始化Fragment,可通过savedInstanceState获取之前保存的值
onCreateView(): 初始化fragment布局
onActivityCreated()
2,activity:started
onStart() 变为可见状态
3,activity:resumed
onResume() 变为可交互状态
4,activity:paused
onPause() 可见,不可交互
onSaveInstanceStace()
5,activity:stop
onStop() 不可见
6,activity:onDestory
onDestoryView 销毁Fragment视图,但未解绑activity
onDestory()销毁Fragment
onDetach()解绑activity
三,通信
调用activity:getActivity()
Activity种调用Fragment中的方法:接口回调
Fragment调用Fragment方法:首先通过getActivity()获取activity方法,然后通过findFragmentByID
获取到activity对应的fragment方法
四:Fragment的replace,add,remove方法
replace相当于remove,然后add.