Android Fragment 生命周期及其API使用(建议使用自定义View替换Fragment)
2015-10-13 22:39
579 查看
我为什么不主张使用Fragment
Fragment:( Fragment就相当于一个有生命周期的View,它的生命周期被所在的Activity的生命周期管理 )生命周期回调说明:
onAttach(Activity)
当Fragment与Activity发生关联时调用。
onCreateView(LayoutInflater, ViewGroup,Bundle)
创建该Fragment的视图
onActivityCreated(Bundle)
当Activity的onCreate方法返回时调用
onDestoryView()
与onCreateView想对应,当该Fragment的视图被移除时调用
onDetach()
与onAttach相对应,当Fragment与Activity关联被取消时调用
Fragment Api:
Fragment常用的三个类:
android.app.Fragment 主要用于定义Fragment
android.app.FragmentManager 主要用于在Activity中操作Fragment
android.app.FragmentTransaction 保证一些列Fragment操作的原子性
主要的操作都是FragmentTransaction的方法:
// v4包中,getSupportFragmentManager FragmentManager fm = getFragmentManager(); // 开启一个事务 (主要的操作都是FragmentTransaction的方法) FragmentTransaction transaction = fm.benginTransatcion(); // 往Activity中添加一个Fragment transaction.add(Fragment fragment); // 从Activity中移除一个Fragment,如果被移除的Fragment没有添加到回退栈(回退栈后面会详细说),这个Fragment实例将会被销毁。 transaction.remove(Fragment fragment); // 使用另一个Fragment替换当前的,实际上就是remove()然后add()的合体 transaction.replace(R.id.XXX, Fragment fragment); // 隐藏当前的Fragment,仅仅是设为不可见,并不会销毁 transaction.hide(Fragment fragment); // 显示之前隐藏的Fragment transaction.show(Fragment fragment); //提交一个事务 transatcion.commit();
// 会将view从UI中移除,和remove()不同,此时fragment的状态依然由FragmentManager维护。
detach()
// 重建view视图,附加到UI上并显示。
attach();
判断什么时候该使用什么方法:
(1)希望保留用户操作的面板,可以使用hide和show。
[b](2)不希望保留用户操作,可以使用remove(),然后add();或者直接使用replace(),效果相同。[/b]
(3)remove会销毁整个Fragment实例,而detach则只是销毁其视图结构,实例并不会被销毁。
(4)[b]当前Activity一直存在,那么在不希望保留用户操作的时候,可以优先使用detach。[/b]
参考地址:Android Fragment 真正的完全解析(上) Android Fragment 真正的完全解析(下)
对于一些操作,Fragment发生的生命周期变化:
切换到该Fragment:onAttach() -> onCreate() -> onCreateView() -> onActivityCreated() -> onStart() -> onResume()
屏幕灭掉或者回到桌面(Home): onPause() -> onSaveInstanceState() -> onStop()
屏幕解锁或者重新回到应用: onStart() -> onResume()
切换到其他Fragment: onPause() -> onStop() -> onDestroyView()
切换回本身的Fragment: onCreateView() -> onActivityCreated() -> onStart() -> onResume()
退出应用:onPause() -> onStop() -> onDestroyView() -> onDestroy() -> onDetach()
相关文章推荐
- bin/ld.exe: error: cannot find -landroid等问题
- 如何跳过Nexus 7二代的开机设置
- Android 项目(一):自定义View绘制“折线图”
- android获取单个通讯录联系人信息并分享内容(短信邀请)
- Android 五大布局之(一) 线性布局和相对布局
- Android 6.0中art虚拟机编译dex时已完全放弃使用LLVM
- android 捕获 UncaughtExceptionHandler
- Android中windowSoftInputMode属性详解
- Android应用开发性能优化完全分析
- 【Android】error: Error retrieving parent for item: No resource found that matches the given name 'Theme.Sherlock.Light.NoActionBar'.
- Android Intent 意图作用
- Android 获取屏幕高宽度,密度,通知栏高度,截图等常用方法
- Android Toast提示封装
- Android 隐藏显示键盘
- 【Android】未引入包问题
- Android 项目实践(三)——数据库封装
- Android自定义View系列之可伸缩的TextView
- android代码实现app升级
- Android 工具类 —— 系统px 和 dp 的转换
- Android自定义属性