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

本文介绍了一种优化ViewPager预加载的方法,通过隐藏并延迟显示非当前页面来减少初次加载时资源消耗,适用于独立使用的ViewPager。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文主要是记录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() {
		@Override
		public 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);
我这边测试效果还是可以的



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值