最近改一个bug,viewpager和fragement结合使用,数据滑动的时候,页面会出现数据错乱,加上复杂的逻辑环境,费了不少劲才找到问题,主要是没有使用set/getArguments的标准方式传递参数,而是复写了父类的setArguments方法,直接在这传的参,这样滑动页面的时候会出现销毁和重建的问题,viewpager的adapter在销毁一个页面的时候会存储这个页面的各种args,存到bundle中,其中包括当调用fragment的setArguments的时存储的一份参数,但是因为复写了这个函数,并且没有调用super方法,这样传递的参数就没保存,销毁重建的时候就没有参数了。
还有一个项目里的代码,在viewpager的adapter的getitem函数中有个判断mPager.getCurrentItem() == position的条件,即是否当前展示的页面是要加载的页面,这乍看起来很奇怪,我要加载的页面当然是我当前要展示的页面,但是这里忽略一个情况,就是viewpager会预加载,展示一个页面会同时加载好多页面,这跟setOffscreenPageLimit这个函数有关,在getitem函数里加上这个条件判断,当展示的页面和加载页面是同一个,那就找到这个页面返回,如果是预加载,那就返回中间态页面,可以是轻量级的空页面,这样减少开销,当滑动到这个预加载的页面时,可以在onPageSelected里面让空页面加载真正的页面,这样做到延迟加载。
因为对于viewpager的一些原理不明白,也是造成这个bug好久看不出来的原因。当一些问题看似很难的时候,往往是我们该补充基础知识的时候了。
Fragment之set/getArguments重要性
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
- 版权声明:本文为作者原创,转载必须注明出处。 转载请注明出处:https://www.jianshu.com/p/...
- 2017年05月30 最后的懒加载写的不好,推荐请叫我大苏同学写的Fragment懒加载博客,【Android】再...
- 2005年,伦敦地铁连环爆炸案 2005年7月7日早上交通高峰时间,伦敦的数个地铁站和巴士发生连环爆炸,共造成包括...