迁移至ViewPager2

新项目中使用了组件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结合。

你可能感兴趣的:(android前端笔记)