您现在的位置是:首页 > 文章详情

android小技巧之不缓存的ViewPager

日期:2016-08-08点击:734

前言

在开发中我们会经常用到ViewPager这个类,比如引导页的啦,主页啦,等等之类的。

一般情况下,我在ViewPger中都是放的Framgnt,这样简单有方便,但是ViewPager却会默认的缓存当前页面的最近两个页面,于是问题就产生了,我们的需求是只有切换到哪页,哪页才创建或者加载布局,但是谷歌官方的ViewPager却没有自带这个选项,就算我们用setOffscreenPageLimit(0)也不能解决这个问题:

 private static final int DEFAULT_OFFSCREEN_PAGES = 1; public void setOffscreenPageLimit(int limit) { if (limit < DEFAULT_OFFSCREEN_PAGES) { Log.w(TAG, "Requested offscreen page limit " + limit + " too small; defaulting to " + DEFAULT_OFFSCREEN_PAGES); limit = DEFAULT_OFFSCREEN_PAGES; } if (limit != mOffscreenPageLimit) { mOffscreenPageLimit = limit; populate(); } } 

从上面的代码可以看到,就算设置0、负数,它也会默认为1,为了解决这个问题,有两个方法:
第一种:重写整个ViewPager
第二种:使用Fragment的setUserVisibleHint方法(相当于Activity中的onResume方法)

第一种方法

重写整个ViewPager,下面直接上代码,需要的直接拷贝过去就好 没有什么技术含量,一般情况下我用的都是第二种方法。

代码篇幅过长,请直接到仓库复制吧!

设置setOffscreenPageLimit(0),ViewPager就不会缓存了,PS:无法和ToolBar一起使用,

第二种方式

使用Fragment的setUserVisibleHint方法(相当于Activity中的onResume方法)

 public class HomeFragment extends Fragment { private View contentView; /** * 是否创建 */ protected boolean isCreate = false; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { contentView = inflater.inflate(R.layout.fragment_home, container, false); return contentView; } @Override public void onCreate(Bundle savedInstanceState) { isCreate=true; } @Override public void setUserVisibleHint(boolean isVisibleToUser) { super.setUserVisibleHint(isVisibleToUser); if (isVisibleToUser && isCreate) { //相当于Fragment的onResume //在这里处理加载数据等操作 } else { //相当于Fragment的onPause } } 

其它

如果不希望切换ViewPager的时候每次都重新创建Fragment的话,也很简单只需要将适配器的两个方法注释掉就好:

 @Override public void destroyItem(ViewGroup container, int position, Object object) { //super.destroyItem(container, position, object); } @Override public void destroyItem(View container, int position, Object object) { //super.destroyItem(container, position, object); } //不让他们调用父类方法就不会销毁Fagment了 
最后

附上自己git

https://github.com/aohanyao/NoCacheViewPager

来来扫下码,关注一下吧,或者微信搜索AndroidRookie

img_b246dc41a34e6fdd3598d113e0f65194.jpe
AndroidRookie
原文链接:https://yq.aliyun.com/articles/641072
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章