迁移至ViewPager2

本文详细介绍了在Android开发中使用ViewPager2组件的三种常见场景:复用页面内容、利用Fragment实现页面差异较大时的管理以及通过TabLayout实现联动效果。深入探讨了ViewPager2相较于ViewPager的优势,如解决缓存问题,并提供了具体实现代码示例。

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

新项目中使用了组件ViewPager2,因为这个版本内部使用recyclerView实现,解决了缓存问题,于是用法上与ViewPager相比多了一点。
由于4月份更新的api所以使用上与网上19年的文章不一致,导致我懵逼了很久,最后又去看文档,版本androidx.viewpager2:viewpager2:1.0.0正式版,4月份出了这个版本的alpha01

先说用法:总体来说有三种
1)页面区别不大可以复用,内容值不一样=》使用recyclerView

//ViewHolder需要继承RecycleView.ViewHolder
class PagerViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) 
class ViewPagerAdapter extends RecyclerView.Adapter<PagerViewHolder> 

2)页面差异较大,使用fragment做页面
缺点:更新页面不方便

//首先创建指定个数的Fragment
//然后创建ViewPagerFragmentStateAdapter,其中fragments是当前所有生成的fragment,记录数量,此数量与页面挂钩
public class ViewPagerFragmentStateAdapter extends FragmentStateAdapter {
    @NonNull
    @Override
    public Fragment createFragment(int position) { //
        return PageFragment.newInstance(colors, position);
    }
    @Override
    public int getItemCount() {
        return fragments.size();
    }
}
viewPager.setAdapter(new ViewPagerFragmentStateAdapter(),colors);

fragment的形式交互起来非常不容易,但也不是做不到。
记录一个我遇到的情况:
1)需要记录所有new出来的fragment的
2)建立一个大的listener,将其作为所有子fragment的传参,在子fragment的点击事件中调用,从而达到回传点击的效果
3)赋值:我的页面较少只有两个,所以在adapter中建立了返回对应类型的fragment的函数,对fragment直接进行调用

一种实现:tabLayout做联动

mViewPager2.setAdapter(adapter);//这步并不限制是fragment还是recyclerView实现
//绑定tab并实现监听
new TabLayoutMediator(mTabLayout, mViewPager2, (tab, position) -> tab.setText(titles.get(position))).attach();
 // 滑动监听(这块需要注意)
mViewPager2.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
	    @Override
	    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
	        super.onPageScrolled(position, positionOffset, positionOffsetPixels);
	    }

	    @Override
	    public void onPageSelected(int position) {
	        super.onPageSelected(position);
	    }

	    @Override
	    public void onPageScrollStateChanged(int state) {
	        super.onPageScrollStateChanged(state);
	    }
});

androidx中,TabLayout没有setupWithViewPager(ViewPager2 viewPager2)方法,而是用TabLayoutMediator将TabLayout和ViewPager2结合。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值