ViewPager+Fragment避免重复createview
来源:互联网 发布:传奇怎么查看怪物数据 编辑:程序博客网 时间:2024/06/05 19:48
ViewPager+Fragment避免重复createview
每次使用ViewPager+Fragment来作为app的框架的时候都要格外小心,因为他们的生命周期有点奇怪,并没有Activity那样来得自然。如何奇怪呢,请看下面日志
打开app,一开始为第一个Fragment02-09 14:02:12.551 30159-30159/com.tianjiyun.glycuresis V/Kuby_test: MainFragment1 setUserVisibleHint.isVisibleToUser=false02-09 14:02:12.551 30159-30159/com.tianjiyun.glycuresis V/Kuby_test: MainFragment2 setUserVisibleHint.isVisibleToUser=false02-09 14:02:12.551 30159-30159/com.tianjiyun.glycuresis V/Kuby_test: MainFragment1 setUserVisibleHint.isVisibleToUser=true02-09 14:02:12.551 30159-30159/com.tianjiyun.glycuresis V/Kuby_test: MainFragment1onAttach02-09 14:02:12.551 30159-30159/com.tianjiyun.glycuresis V/Kuby_test: MainFragment1onCreate02-09 14:02:12.551 30159-30159/com.tianjiyun.glycuresis V/Kuby_test: MainFragment2onAttach02-09 14:02:12.551 30159-30159/com.tianjiyun.glycuresis V/Kuby_test: MainFragment2onCreate02-09 14:02:12.551 30159-30159/com.tianjiyun.glycuresis V/Kuby_test: MainFragment2onCreateView02-09 14:02:12.561 30159-30159/com.tianjiyun.glycuresis V/Kuby_test: MainFragment2onActivityCreated02-09 14:02:12.561 30159-30159/com.tianjiyun.glycuresis W/FragmentManager: moveToState: Fragment state for MainFragment2{5434690 #0 id=0x7f0c0056 android:switcher:2131492950:1} not updated inline; expected state 3 found 202-09 14:02:12.561 30159-30159/com.tianjiyun.glycuresis V/Kuby_test: MainFragment1onCreateView02-09 14:02:12.561 30159-30159/com.tianjiyun.glycuresis V/Kuby_test: MainFragment1onActivityCreated02-09 14:02:12.561 30159-30159/com.tianjiyun.glycuresis V/Kuby_test: MainFragment1onStart02-09 14:02:12.561 30159-30159/com.tianjiyun.glycuresis V/Kuby_test: MainFragment1onResume02-09 14:02:12.561 30159-30159/com.tianjiyun.glycuresis V/Kuby_test: MainFragment2onStart02-09 14:02:12.561 30159-30159/com.tianjiyun.glycuresis V/Kuby_test: MainFragment2onResume切换到第二个Fragment02-09 14:03:21.981 30159-30159/com.tianjiyun.glycuresis V/Kuby_test: MainFragment3 setUserVisibleHint.isVisibleToUser=false02-09 14:03:21.981 30159-30159/com.tianjiyun.glycuresis V/Kuby_test: MainFragment1 setUserVisibleHint.isVisibleToUser=false02-09 14:03:21.981 30159-30159/com.tianjiyun.glycuresis V/Kuby_test: MainFragment2 setUserVisibleHint.isVisibleToUser=true02-09 14:03:21.981 30159-30159/com.tianjiyun.glycuresis V/Kuby_test: MainFragment3onAttach02-09 14:03:21.981 30159-30159/com.tianjiyun.glycuresis V/Kuby_test: MainFragment3onCreate02-09 14:03:21.981 30159-30159/com.tianjiyun.glycuresis V/Kuby_test: MainFragment3onCreateView02-09 14:03:21.991 30159-30159/com.tianjiyun.glycuresis V/Kuby_test: MainFragment3onActivityCreated02-09 14:03:21.991 30159-30159/com.tianjiyun.glycuresis W/FragmentManager: moveToState: Fragment state for MainFragment3{863ec84 #2 id=0x7f0c0056 android:switcher:2131492950:2} not updated inline; expected state 3 found 202-09 14:03:21.991 30159-30159/com.tianjiyun.glycuresis V/Kuby_test: MainFragment3onStart02-09 14:03:21.991 30159-30159/com.tianjiyun.glycuresis V/Kuby_test: MainFragment3onResume切换到第三个Fragment02-09 14:04:54.941 30159-30159/com.tianjiyun.glycuresis V/Kuby_test: MainFragment4 setUserVisibleHint.isVisibleToUser=false02-09 14:04:54.941 30159-30159/com.tianjiyun.glycuresis V/Kuby_test: MainFragment2 setUserVisibleHint.isVisibleToUser=false02-09 14:04:54.941 30159-30159/com.tianjiyun.glycuresis V/Kuby_test: MainFragment3 setUserVisibleHint.isVisibleToUser=true02-09 14:04:54.941 30159-30159/com.tianjiyun.glycuresis V/Kuby_test: MainFragment4onAttach02-09 14:04:54.941 30159-30159/com.tianjiyun.glycuresis V/Kuby_test: MainFragment4onCreate02-09 14:04:54.941 30159-30159/com.tianjiyun.glycuresis V/Kuby_test: MainFragment1onPause02-09 14:04:54.941 30159-30159/com.tianjiyun.glycuresis V/Kuby_test: MainFragment1onStop02-09 14:04:54.941 30159-30159/com.tianjiyun.glycuresis V/Kuby_test: MainFragment1onDestroyView02-09 14:04:54.941 30159-30159/com.tianjiyun.glycuresis V/Kuby_test: MainFragment4onCreateView02-09 14:04:54.941 30159-30159/com.tianjiyun.glycuresis V/Kuby_test: MainFragment4onActivityCreated02-09 14:04:54.941 30159-30159/com.tianjiyun.glycuresis W/FragmentManager: moveToState: Fragment state for MainFragment4{6fa481c #3 id=0x7f0c0056 android:switcher:2131492950:3} not updated inline; expected state 3 found 202-09 14:04:54.941 30159-30159/com.tianjiyun.glycuresis V/Kuby_test: MainFragment4onStart02-09 14:04:54.941 30159-30159/com.tianjiyun.glycuresis V/Kuby_test: MainFragment4onResume切换到第四个Fragment02-09 14:05:30.941 30159-30159/com.tianjiyun.glycuresis V/Kuby_test: MainFragment3 setUserVisibleHint.isVisibleToUser=false02-09 14:05:30.941 30159-30159/com.tianjiyun.glycuresis V/Kuby_test: MainFragment4 setUserVisibleHint.isVisibleToUser=true02-09 14:05:30.951 30159-30159/com.tianjiyun.glycuresis V/Kuby_test: MainFragment2onPause02-09 14:05:30.951 30159-30159/com.tianjiyun.glycuresis V/Kuby_test: MainFragment2onStop02-09 14:05:30.951 30159-30159/com.tianjiyun.glycuresis V/Kuby_test: MainFragment2onDestroyView最后且回到第一个Fragment02-09 14:06:05.651 30159-30159/com.tianjiyun.glycuresis V/Kuby_test: MainFragment1 setUserVisibleHint.isVisibleToUser=false02-09 14:06:05.651 30159-30159/com.tianjiyun.glycuresis V/Kuby_test: MainFragment2 setUserVisibleHint.isVisibleToUser=false02-09 14:06:05.651 30159-30159/com.tianjiyun.glycuresis V/Kuby_test: MainFragment4 setUserVisibleHint.isVisibleToUser=false02-09 14:06:05.651 30159-30159/com.tianjiyun.glycuresis V/Kuby_test: MainFragment1 setUserVisibleHint.isVisibleToUser=true02-09 14:06:05.651 30159-30159/com.tianjiyun.glycuresis V/Kuby_test: MainFragment1onCreateView02-09 14:06:05.651 30159-30159/com.tianjiyun.glycuresis V/Kuby_test: MainFragment1onActivityCreated02-09 14:06:05.651 30159-30159/com.tianjiyun.glycuresis V/Kuby_test: MainFragment1onStart02-09 14:06:05.651 30159-30159/com.tianjiyun.glycuresis V/Kuby_test: MainFragment1onResume02-09 14:06:05.651 30159-30159/com.tianjiyun.glycuresis V/Kuby_test: MainFragment2onCreateView02-09 14:06:05.651 30159-30159/com.tianjiyun.glycuresis V/Kuby_test: MainFragment2onActivityCreated02-09 14:06:05.651 30159-30159/com.tianjiyun.glycuresis W/FragmentManager: moveToState: Fragment state for MainFragment2{5434690 #0 id=0x7f0c0056 android:switcher:2131492950:1} not updated inline; expected state 3 found 202-09 14:06:05.651 30159-30159/com.tianjiyun.glycuresis V/Kuby_test: MainFragment2onStart02-09 14:06:05.651 30159-30159/com.tianjiyun.glycuresis V/Kuby_test: MainFragment2onResume02-09 14:06:06.101 30159-30159/com.tianjiyun.glycuresis V/Kuby_test: MainFragment3onPause02-09 14:06:06.101 30159-30159/com.tianjiyun.glycuresis V/Kuby_test: MainFragment3onStop02-09 14:06:06.101 30159-30159/com.tianjiyun.glycuresis V/Kuby_test: MainFragment3onDestroyView02-09 14:06:06.101 30159-30159/com.tianjiyun.glycuresis V/Kuby_test: MainFragment4onPause02-09 14:06:06.101 30159-30159/com.tianjiyun.glycuresis V/Kuby_test: MainFragment4onStop02-09 14:06:06.101 30159-30159/com.tianjiyun.glycuresis V/Kuby_test: MainFragment4onDestroyView
一般createView都是一次就行了,因为有时候请求网络啊,或者一些数据已经改变了,后来再切回来就恢复了初始状态。Android官方为了性能,做了这样的灵活设置,切换到下一个fragment的时候会预加载相邻的Fragment,然后把不相邻的都销毁掉,切回被销毁掉的Fragment的时候又会重新createView一次。这样做可能性能得到提高,可是实际开发中却显得有点不方便,也许是我没有领会到更高级的写法。那么我只想要他们老老实实的像Activity一样怎么办呢?这就是这篇文章的目的
解决办法:
具体情况看我写的这个demo,自定义了一个Fragment的超类BaseFragment,只要继承这个BaseFragment,不要复写生命周期,复写几个方法就可以了。使用情况请看上面的注释。
下载地址:http://download.csdn.net/detail/u014736095/9750716
很多时候开发者我为了方便使用了show和hind的方法去控制他们,因为这样可以解决viewpager的预加载问题。但是这样没有切换动画,如重Fragment1切换到Fragment4,用show和hind就不会按照1.2.3-->4这样的切换动画,而是1-->4。
0 0
- ViewPager+Fragment避免重复createview
- Android中ViewPager配合Fragment使用避免重复加载
- FragmentTabHost切换Fragment时避免重复加载UI(ViewPager切换Fragment时也适用)
- FragmentTabHost切换Fragment时避免重复加载UI(ViewPager切换Fragment时也适用)
- 关于避免fragment重复加载
- 切换Fragment避免重复加载
- android viewpager+fragment 避免预加载,缓存
- viewPager引导页避免重复加载
- 切换Fragment时避免重复加载UI
- Fragment如何避免onCreateView重复调用
- 28.如何避免fragment重复加载
- Android 保存Fragment状态,避免重复加载
- viewpager和fragment中数据重复。
- Android 多个Fragment切换时,避免重复创建Fragment。
- FragmentTabHost切换Fragment时避免重复加载UI
- FragmentTabHost切换Fragment时避免重复加载UI
- FragmentTabHost切换Fragment时避免重复加载UI
- FragmentTabHost切换Fragment时避免重复加载UI
- HTML学习笔记(三)
- 第四届蓝桥杯软件类国赛真题-C-C-1_猜年龄
- 优秀程序员不得不知道的20个位运算技巧
- 十、MapReduce 分析网站基本指标
- 用反射+配置文件实现数据访问程序
- ViewPager+Fragment避免重复createview
- excel常用功能记录(不断更新)
- Parameterized unit tests with JUnit 4
- 去掉字符串中的转义字符
- 第四届蓝桥杯软件类国赛真题-C-B-2_马虎的算式
- OPENSSL库的使用-DES篇
- vue1.0学习总结
- 学习vimium快捷键
- 当手机等设备旋转时,为何我们在微信输入框中输入的文字会消失?