Android之ViewPager延迟加载的另类实现

来源:互联网 发布:满记甜品什么好吃知乎 编辑:程序博客网 时间:2024/05/05 08:22

本文主要是记录ViewPager使用中第一次加载过多元素的解决方法

我在使用ViewPager时是单独使用的,没有跟诸如Fragment等连用
思路:先 隐藏要预加载的界面,延时一段时间,比如1秒,在设置预加载的界面显示
需要预加载的界面跟参数设置有关系
ViewPager.setOffscreenPageLimit(int) 这个方法的参数默认是 1 ;
这个方法的意思是设置当前显示也的左右各预先加载几个页面;
打个比方,我们设置参数为 2 ,当前显示 第 5 页 ,则 第 3,4,6,7页的元素都已加载好
如果设置为0 ,是没有效果的,源码里强制了至少是 1;

List<View> mPagers = new ArrayList<>();// init mPages...int mCurrentPage = 4; // 显示第四页    mViewPager = (ViewPager) findViewById(R.id.viewpager);    mViewPager.setAdapter(new ViewPagerAdapter(mPagers));//mViewPager.setOffscreenPageLimit(2);// 0 is useless    mViewPager.addOnPageChangeListener(pageChangeListener);    mViewPager.setOverScrollMode(View.OVER_SCROLL_NEVER);if(mCurrentPage == 0){mPagers.get(mCurrentPage + 1).setVisibility(View.INVISIBLE);}else if(mCurrentPage == mViewCtrl.getMenuData().dynamic.size() - 1){mPagers.get(mCurrentPage - 1).setVisibility(View.INVISIBLE);}else {// 左边和右边的消失mPagers.get(mCurrentPage - 1).setVisibility(View.INVISIBLE);mPagers.get(mCurrentPage + 1).setVisibility(View.INVISIBLE);}    mViewPager.setCurrentItem(mCurrentPage);

上面这段代码,mPagers里存放页面,if 判断里面,目的是把当前显示页面的左右两边 INVISIBLE
然后 mViewPager 真是显示出来时,延时一下,把隐藏的界面显示出来

mHandler.postDelayed(new Runnable() {@Overridepublic void run() {if(mCurrentPage == 0){mPagers.get(mCurrentPage + 1).setVisibility(View.VISIBLE);}else if(mCurrentPage == mViewCtrl.getMenuData().dynamic.size() - 1){mPagers.get(mCurrentPage - 1).setVisibility(View.VISIBLE);}else {// 左边和右边的消失mPagers.get(mCurrentPage - 1).setVisibility(View.VISIBLE);mPagers.get(mCurrentPage + 1).setVisibility(View.VISIBLE);}}}, 1000);
我这边测试效果还是可以的



0 0
原创粉丝点击