Android Java开发中FragmentStatePagerAdapter已过时,实现ViewPager该如何处理?
解决方案
方案1:保留原有ViewPager,修改适配器构造参数
FragmentStatePagerAdapter 仅无 behavior 参数的旧构造方法被弃用,你只需修改构造方法传入官方推荐的生命周期行为参数即可,原有业务逻辑无需调整,修改后代码如下:
mViewPager.setAdapter(new FragmentStatePagerAdapter(fragmentManager, FragmentStatePagerAdapter.BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT) { @Override public Fragment getItem(int position) { Crime crime = mCrimes.get(position); return CrimeFragment.newInstance(crime.getId()); } @Override public int getCount() { return mCrimes.size(); } });
BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT 参数代表仅当前对用户可见的 Fragment 会进入 RESUMED 状态,其余 Fragment 最多执行到 STARTED 生命周期,能减少不必要的资源占用。
方案2:迁移到ViewPager2(长期迭代推荐)
ViewPager 已停止官方迭代,现在更推荐使用基于 RecyclerView 实现的 ViewPager2,支持动态修改数据集、垂直滚动、RTL 布局等特性,迁移步骤如下:
- 布局文件中把原有
androidx.viewpager.widget.ViewPager替换为androidx.viewpager2.widget.ViewPager2 - 适配器替换为
FragmentStateAdapter,示例代码如下:
// Activity中使用直接传入this mViewPager.setAdapter(new FragmentStateAdapter(this) { @NonNull @Override public Fragment createFragment(int position) { Crime crime = mCrimes.get(position); return CrimeFragment.newInstance(crime.getId()); } @Override public int getItemCount() { return mCrimes.size(); } });
如果是在 Fragment 中使用 ViewPager2,适配器构造改为传入:new FragmentStateAdapter(getChildFragmentManager(), getLifecycle())
内容的提问来源于stack exchange,提问作者amir mhmdi
相关产品推荐
相关产品推荐

