网上关于Fragment的使用建议和分析很多,但是依然会有很多人在使用Fragment的时候出现各种奇葩错误
这篇文章我分享一下各种项目中解决Fragment的各种注意事项(不做原理分析),如果有错误欢迎大家指出
0,必须知道Activity 、Fragment的生命周期。平时多看多对比就好,强记感觉效果不好
1,如果Fragment初始化时需要传入参数那么必须实现setArguments,同时必须重新onCreate方法对存入的值进行读取
2,Fragment如果在运行期间参数的新的全部变量(网络,计算等),必须在onSaveInstanceState里面进行保存;可以在onViewCreated里面重新对view赋值
3,尽量不要用到getActivity,如果用到一定需要非空判断
4,Fragment最好不要用到异步线程,如果用到一定要考虑fragment是否被回收后线程回调情况;或者在onPase里面中断
5,如果在其它地方拿到frament的引用在使用它的全部变量,必须考虑当前fragment是否存在或者2是否已经实现
6,FragmentManager系统会用这个来管理如果出现的fragment,如果出现奇葩的不可理解的异常请想一下这个类
举个栗子:viewpager+fragment的使用场景,List<Fragment> mFragments 中需要修改或删除其中的对象,调用刷新比起作用。简单修改你需要在FragmentManager里面移除你需要变得的fragment或者替换,即可达到效果
7,百度统计关于fragment的统计未考虑6情况,可能会造成onResume和onPase方法不一致,然后给出一个内存泄露的警告
8,如果在fragment的布局文件直接指定点击处理事件,如果在当前的fragment里面找不到,请看加载它的Activity
9,fragment里面startActivityForResult,在低版本里面不会有相应的回调。解决办法在它的Activity里面处理
10,fragment里面 View mView = inflater.inflate(R.layout.xxx null);第二个参数如果没有特殊使用请设置null
11,一个优化FragmentManager可以用findByTag获取你当前使用的fragment,而不用时时的保持引用(注意6)
12,v4包和sdk下面的引用路径用的不是一个东东,会有兼容问题
13,请用DialogFragment取代AlertDialog
最后补充一个图来源不知道了
版权声明:本文为博主原创文章,未经博主允许不得转载。