Fragment声明周期 开发遇到的问题
2016-01-12 18:13
211 查看
Activity A(MainActivity)中添加了一个Fragment,在Fragment中启动另一个Activity B,在执行B.finish(),A.finish()生命周期如下
// MainActivity启动FragmentPagerActivity,FragmentPagerActivity里面有四个Fragment,刚开始添加了A和B
三、Fragment A启动一个Activity,执行Activity.finish()方法,在A里面的onActivityResult接收参数。ViewPager里面所有拥有onResume状态的Fragment都跟随Activity生命周期在执行。
结论:1、Activity生命周期方法的调用在Fragment相同生命周期方法之前。
2、ViewPager会将创建的Fragment执行到onResume方法,对于任一个Fragment其左边和右边只能紧挨着一个Fragment为onResume。
比如刚开始A和B为onResume,当A滑向B时创建C,在滑向C时没有紧挨着的A就要执行到onDestroyView同时创建D。
3、ViewPager里面所有拥有onResume状态的Fragment都跟随Activity生命周期在执行。
4、嵌套fragment时getActivity()第二次为空 解决方法 http://www.tuicool.com/articles/2eM32a 或者将activity的context设置成静态。
5、嵌套fragment时onActivityResult接收不到数据,解决方法getParentFragment().startActivityForResult()进行启动,在传递到子Fragment中去。
6、关于Fragment 不响应onActivityResult的情况分析 http://blog.sina.com.cn/s/blog_5da93c8f0101o2k1.html
01-12 11:01:00.555: I/System.out(18028): MainActivity onCreate .... 01-12 11:01:00.555: I/System.out(18028): FragmentManager{42283648 in MainActivity{422833e8}} 01-12 11:51:03.790: E/FragmentOne(28346): Fragment -> onAttach 01-12 11:51:03.790: E/FragmentOne(28346): Fragment -> onCreate 01-12 11:51:03.800: E/FragmentOne(28346): Fragment -> onCreateView: 01-12 11:51:03.800: E/FragmentOne(28346): Fragment -> onActivityCreated 01-12 11:51:03.800: E/FragmentOne(28346): Fragment -> onStart 01-12 11:51:03.800: I/System.out(28346): MainActivity onResume .... 01-12 11:51:03.800: E/FragmentOne(28346): Fragment -> onResume //按Home键 01-12 11:53:43.960: I/System.out(28346): MainActivity onPause .... 01-12 11:53:43.965: E/FragmentOne(28346): Fragment -> onPause 01-12 11:53:44.655: I/System.out(28346): MainActivity onStop .... 01-12 11:53:44.660: E/FragmentOne(28346): Fragment -> onStop //点击桌面图标重新启动 01-12 11:53:49.500: I/System.out(28346): MainActivity onRestart .... 01-12 11:53:49.500: E/FragmentOne(28346): Fragment -> onStart 01-12 11:53:49.500: I/System.out(28346): MainActivity onResume .... 01-12 11:53:49.500: E/FragmentOne(28346): Fragment -> onResume //Fragment中启动Activity B 01-12 11:51:33.775: I/System.out(28346): MainActivity onPause .... 01-12 11:51:33.775: E/FragmentOne(28346): Fragment -> onPause 01-12 11:51:33.995: I/System.out(28346): MainActivity onStop .... 01-12 11:51:33.995: E/FragmentOne(28346): Fragment -> onStop //执行B.finish(),执行onActivityResult在获取参数值name 01-12 11:51:52.325: E/FragmentOne(28346): Fragment -> onActivityResult:0 name: 01-12 11:51:52.325: I/System.out(28346): MainActivity onRestart .... 01-12 11:51:52.325: E/FragmentOne(28346): Fragment -> onStart 01-12 11:51:52.325: I/System.out(28346): MainActivity onResume .... 01-12 11:51:52.325: E/FragmentOne(28346): Fragment -> onResume //执行A.finish() 01-12 11:52:04.310: I/System.out(28346): MainActivity onPause .... 01-12 11:52:04.310: E/FragmentOne(28346): Fragment -> onPause 01-12 11:52:05.035: I/System.out(28346): MainActivity onStop .... 01-12 11:52:05.035: E/FragmentOne(28346): Fragment -> onStop 01-12 11:52:05.035: I/System.out(28346): MainActivity onDestroy .... 01-12 11:52:05.035: E/FragmentOne(28346): Fragment -> onDestroyView 01-12 11:52:05.035: E/FragmentOne(28346): Fragment -> onDestroy 01-12 11:52:05.035: E/FragmentOne(28346): Fragment -> onDetach //Activity里面放入Fragment时,先执行Activity的方法,紧接着调用Fragment对应的方法
// MainActivity启动FragmentPagerActivity,FragmentPagerActivity里面有四个Fragment,刚开始添加了A和B
01-12 11:57:36.550: I/System.out(28346): MainActivity onPause .... 01-12 11:57:36.550: E/FragmentOne(28346): Fragment -> onPause 01-12 11:57:36.580: I/System.out(28346): FragmentPagerActivity onCreate .... 01-12 11:57:36.580: I/System.out(28346): FragmentPagerActivity onResume .... 01-12 11:57:36.595: E/FragmentOne(28346): Fragment A -> onAttach 01-12 11:57:36.595: E/FragmentOne(28346): Fragment A -> onCreate 01-12 11:57:36.600: E/FragmentOne(28346): Fragment A -> onCreateView: 01-12 11:57:36.600: E/FragmentOne(28346): Fragment A -> onActivityCreated 01-12 11:57:36.600: E/FragmentOne(28346): Fragment A -> onStart 01-12 11:57:36.600: E/FragmentOne(28346): Fragment A -> onResume 01-12 11:57:36.600: E/FragmentOne(28346): Fragment B -> onAttach 01-12 11:57:36.600: E/FragmentOne(28346): Fragment B -> onCreate 01-12 11:57:36.605: E/FragmentOne(28346): Fragment B -> onCreateView: 01-12 11:57:36.605: E/FragmentOne(28346): Fragment B -> onActivityCreated 01-12 11:57:36.605: E/FragmentOne(28346): Fragment B -> onStart 01-12 11:57:36.605: E/FragmentOne(28346): Fragment B -> onResume ///A滑向B创建了C,此时标签在B 01-12 11:57:59.345: E/FragmentOne(28346): Fragment C -> onAttach 01-12 11:57:59.345: E/FragmentOne(28346): Fragment C -> onCreate 01-12 11:57:59.350: E/FragmentOne(28346): Fragment C -> onCreateView: 01-12 11:57:59.350: E/FragmentOne(28346): Fragment C -> onActivityCreated 01-12 11:57:59.350: E/FragmentOne(28346): Fragment C -> onStart 01-12 11:57:59.350: E/FragmentOne(28346): Fragment C -> onResume //B滑向C先将A执行到onDestroyView方法在创建D,此时标签在C 01-12 11:58:20.325: E/FragmentOne(28346): Fragment A -> onPause 01-12 11:58:20.325: E/FragmentOne(28346): Fragment A -> onStop 01-12 11:58:20.325: E/FragmentOne(28346): Fragment A -> onDestroyView 01-12 11:58:20.330: E/FragmentOne(28346): Fragment D -> onAttach 01-12 11:58:20.330: E/FragmentOne(28346): Fragment D -> onCreate 01-12 11:58:20.335: E/FragmentOne(28346): Fragment D -> onCreateView: 01-12 11:58:20.335: E/FragmentOne(28346): Fragment D -> onActivityCreated 01-12 11:58:20.335: E/FragmentOne(28346): Fragment D -> onStart 01-12 11:58:20.335: E/FragmentOne(28346): Fragment D -> onResume //C滑向D,先将B执行到onDestroyView方法 01-12 12:00:41.565: E/FragmentOne(28346): Fragment B -> onPause 01-12 12:00:41.565: E/FragmentOne(28346): Fragment B -> onStop 01-12 12:00:41.565: E/FragmentOne(28346): Fragment B -> onDestroyView //D滑向C,将B重新创建到onResume状态 01-12 12:01:47.750: E/FragmentOne(28346): Fragment B -> onCreateView: 01-12 12:01:47.750: E/FragmentOne(28346): Fragment B -> onActivityCreated 01-12 12:01:47.750: E/FragmentOne(28346): Fragment B -> onStart 01-12 12:01:47.750: E/FragmentOne(28346): Fragment B -> onResume //6 FragmentPagerActivity执行finish(),当前标签在C上 01-12 12:02:36.780: I/System.out(28346): FragmentPagerActivity onPause .... 01-12 12:02:36.780: E/FragmentOne(28346): Fragment B -> onPause 01-12 12:02:36.780: E/FragmentOne(28346): Fragment C -> onPause 01-12 12:02:36.780: E/FragmentOne(28346): Fragment D -> onPause //6.1 MainActivity回到resume状态 01-12 12:02:36.790: I/System.out(28346): MainActivity onRestart .... 01-12 12:02:36.790: E/FragmentOne(28346): Fragment -> onStart 01-12 12:02:36.790: I/System.out(28346): MainActivity onResume .... 01-12 12:02:36.790: E/FragmentOne(28346): Fragment -> onResume //6.2 FragmentPagerActivity依次执行onStop,onDestroy。此时A已经在前面执行了onDestroyView方法,根据添加的 //顺序依次退出。可以看出FragmentManager只是消除了A的View,并没有销毁它的结构 01-12 12:02:36.905: I/System.out(28346): FragmentPagerActivity onStop .... 01-12 12:02:36.905: E/FragmentOne(28346): Fragment B -> onStop 01-12 12:02:36.905: E/FragmentOne(28346): Fragment C -> onStop 01-12 12:02:36.905: E/FragmentOne(28346): Fragment D -> onStop 01-12 12:02:36.905: I/System.out(28346): FragmentPagerActivity onDestroy .... 01-12 12:02:36.905: E/FragmentOne(28346): Fragment A -> onDestroy 01-12 12:02:36.905: E/FragmentOne(28346): Fragment A -> onDetach 01-12 12:02:36.905: E/FragmentOne(28346): Fragment B -> onDestroyView 01-12 12:02:36.910: E/FragmentOne(28346): Fragment B -> onDestroy 01-12 12:02:36.910: E/FragmentOne(28346): Fragment B -> onDetach 01-12 12:02:36.910: E/FragmentOne(28346): Fragment C -> onDestroyView 01-12 12:02:36.910: E/FragmentOne(28346): Fragment C -> onDestroy 01-12 12:02:36.910: E/FragmentOne(28346): Fragment C -> onDetach 01-12 12:02:36.910: E/FragmentOne(28346): Fragment D -> onDestroyView 01-12 12:02:36.910: E/FragmentOne(28346): Fragment D -> onDestroy 01-12 12:02:36.910: E/FragmentOne(28346): Fragment D -> onDetach
三、Fragment A启动一个Activity,执行Activity.finish()方法,在A里面的onActivityResult接收参数。ViewPager里面所有拥有onResume状态的Fragment都跟随Activity生命周期在执行。
//当前标签在A处于onRsume状态的Fragment有A和B,因此他们都执行了。 01-12 12:25:45.920: I/System.out(28346): FragmentPagerActivity onPause .... 01-12 12:25:45.920: E/FragmentOne(28346): Fragment A -> onPause 01-12 12:25:45.920: E/FragmentOne(28346): Fragment B -> onPause 01-12 12:25:46.080: I/System.out(28346): FragmentPagerActivity onStop .... 01-12 12:25:46.080: E/FragmentOne(28346): Fragment A -> onStop 01-12 12:25:46.080: E/FragmentOne(28346): Fragment B -> onStop
01-12 12:25:55.050: E/FragmentOne(28346): Fragment A -> onActivityResult:0 name: 01-12 12:25:55.050: I/System.out(28346): FragmentPagerActivity onRestart .... 01-12 12:25:55.050: E/FragmentOne(28346): Fragment A -> onStart 01-12 12:25:55.050: E/FragmentOne(28346): Fragment B -> onStart 01-12 12:25:55.050: I/System.out(28346): FragmentPagerActivity onResume .... 01-12 12:25:55.050: E/FragmentOne(28346): Fragment A -> onResume 01-12 12:25:55.050: E/FragmentOne(28346): Fragment B -> onResume
结论:1、Activity生命周期方法的调用在Fragment相同生命周期方法之前。
2、ViewPager会将创建的Fragment执行到onResume方法,对于任一个Fragment其左边和右边只能紧挨着一个Fragment为onResume。
比如刚开始A和B为onResume,当A滑向B时创建C,在滑向C时没有紧挨着的A就要执行到onDestroyView同时创建D。
3、ViewPager里面所有拥有onResume状态的Fragment都跟随Activity生命周期在执行。
4、嵌套fragment时getActivity()第二次为空 解决方法 http://www.tuicool.com/articles/2eM32a 或者将activity的context设置成静态。
5、嵌套fragment时onActivityResult接收不到数据,解决方法getParentFragment().startActivityForResult()进行启动,在传递到子Fragment中去。
6、关于Fragment 不响应onActivityResult的情况分析 http://blog.sina.com.cn/s/blog_5da93c8f0101o2k1.html
相关文章推荐
- 009Palindrome Number (C)
- Security1:Create Login
- 【常用工具类】Material Design 调色盘
- iOS界面调试工具--Reveal
- HTML 部分名词解释(CDN、DOM)
- [easyui]封装一个form
- iOS 9 Auto Layout界面自动布局系列-自适应布局
- angularjs比JQuery优越在哪里
- struts2中s:iterator 标签的使用详解
- mysql表数据压缩
- VS error c2504未定义基类
- 且行且珍惜,还在coder的人们
- 如何将SDK中的ApiDemos导入android手机中
- 低功耗蓝牙4.0BLE编程-nrf51822开发(11)-蓝牙串口代码分析
- android6.0 ble scan android6.0蓝牙扫描
- machine-learning第四周 上机作业
- 设计模式之---单例模式
- [Redux] React Todo List Example (Adding a Todo)
- Unity资源管理汇总
- 写写alert(A&&B)与alert(A||B)之间的事儿