Fragment用法细节

生命周期

Create阶段:
onAttach,onCreate,onCreateView,onActivityCreated

Destory阶段:
onDestroyView,onDestory,onDettach.

onAttached()
当fragment被加入到activity时调用(在这个方法中之后可以获得所在的activity)

onCreateView()
当activity要得到fragment的layout时,调用此方法,fragment在其中创建自己的layout(界面)。

onActivityCreated()
当activity的onCreated()方法返回后调用此方法

onDestroyView()
当fragment中的视图被移除的时候,调用这个方法。

onDetach()
当fragment和activity分离的时候,调用这个方法。

Activity传递数据给Fragment

在Activity中,将数据放到Bundle对象,调用Fragment对象的setArguments(Bundle bundle) 存入数据
在Fragment中,使用getArguments()获取到在Activity中存入的Bundle

Fragment之间传递数据

Fragment之间最好不要直接传递,借助activity传递
步骤:
1. 使Activity implements一个接口A,重写A中的方法
2. Fragment中使用getActivity()将activity强制转换为接口A(如果activity没有实现接口,则会报错),赋值给Fragment中的A实例,回调
在Activity中重写的方法中调用另一个Fragment的public方法

与Activity交互

调用Activity中的方法

mainActivity = (MainActivity) getActivity(); 使用获取到的对象调用MainActivity中的方法

获取关联的同一个Activity上的另一个Fragment中的控件

回退栈

transaction.addToBackStack(String name);
调用tx.addToBackStack(null);将当前的事务添加到了回退栈,所以Fragment实例不会被销毁,但是视图层次依然会被销毁,即会调用onDestoryView和onCreateView.

清空回退栈 getFragmentManager().popBackStackImmediate( null ,1);

切换Fragment

FragmentTransaction对象调用show,add,hide,replace方法
示例:
getFragmentManager().beginTransaction().replace(R.id.contain, fragment);

不推荐直接使用replace切换Fragment,建议使用add+show显示Fragment,同时使用hide隐藏上一个Fragment;

hide方法调用时会触发Fragment的onHiddenChanged回调

注意点

在new一个新的Fragment对象前, 判断该变量名是否为空, 非空时在new新的对象
防止Activity重载时Fragment重复新建, 造成重叠

0 Comments
Leave a Reply