从ViewPager迁移到ViewPager2时出现java问题
这个viewpager已经运行得很好了
我想从viewpager迁移到viewpager2。但当我向左/向右滚动viewpager2时会出现一个问题,片段中的表格有时会出现,有时则不会。我的代码有问题吗
ViewPager(旧版)-此功能运行正常
private static class SettingAdapter extends FragmentStatePagerAdapter {
private List<Fragment> fragmentList = new ArrayList<>();
private List<String> titleList = new ArrayList<>();
public SettingAdapter(@NonNull FragmentManager fm, int behavior) {
super(fm, behavior);
}
@NonNull
@Override
public Fragment getItem(int position) {
return fragmentList.get(position);
}
@Override
public int getCount() {
return fragmentList.size();
}
public void addFragment(@NonNull Fragment fragment, @NonNull String title) {
fragmentList.add(fragment);
titleList.add(title);
}
@Override
public int getItemPosition(@NonNull Object object) {
return POSITION_NONE;
}
@Override
public CharSequence getPageTitle(int position) {
return titleList.get(position);
}
}
设置适配器从片段中的onCreateView调用(旧)
titles = getSettingTabTitlesRes(context);
adapter = new SettingAdapter(getChildFragmentManager(), BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT);
if (titles.length == 15) {
adapter.addFragment(new NetworkFragment(), titles[0]);
adapter.addFragment(new PopulationsFragment(), titles[1]);
adapter.addFragment(new BankFragment(), titles[2]);
adapter.addFragment(new PetrolStationFragment(), titles[3]);
adapter.addFragment(new DispenserFragment(), titles[4]);
adapter.addFragment(new ProductFragment(), titles[5]);
adapter.addFragment(new EmployeeFragment(), titles[6]);
adapter.addFragment(new NozzleFragment(), titles[7]);
adapter.addFragment(new PaymentMethodFragment(), titles[8]);
adapter.addFragment(new WorkScheduleFragment(), titles[9]);
adapter.addFragment(new ReceiptPaperFragment(), titles[10]);
adapter.addFragment(new CustomersFragment(), titles[11]);
adapter.addFragment(new UserAccountFragment(), titles[12]);
adapter.addFragment(new LicenseFragment(), titles[13]);
adapter.addFragment(new HelpFragment(), titles[14]);
}
binding.settingViewpager.setAdapter(adapter);
binding.settingTablayout.setupWithViewPager(viewPager);
ViewPager2(新)-此处存在问题强>
private static class SettingAdapter extends FragmentStateAdapter {
public SettingAdapter(@NonNull Fragment fragment) {
super(fragment);
}
@NonNull
@Override
public Fragment createFragment(int position) {
Log.i("xxx", "createFragment: " + position);
switch (position) {
default:
case 0:
return new NetworkFragment();
case 1:
return new PopulationsFragment();
case 2:
return new BankFragment();
case 3:
return new PetrolStationFragment();
case 4:
return new DispenserFragment();
case 5:
return new ProductFragment();
case 6:
return new EmployeeFragment();
case 7:
return new NozzleFragment();
case 8:
return new PaymentMethodFragment();
case 9:
return new WorkScheduleFragment();
case 10:
return new ReceiptPaperFragment();
case 11:
return new CustomersFragment();
case 12:
return new UserAccountFragment();
case 13:
return new LicenseFragment();
case 14:
return new HelpFragment();
}
}
@Override
public int getItemCount() {
return 15;
}
}
设置适配器从片段中的创建视图调用(新增)
String[] titles = getSettingTabTitlesRes(context);
settingAdapter = new SettingAdapter(this);
binding.settingViewpager.setOffscreenPageLimit(2);
binding.settingViewpager.setAdapter(settingAdapter);
new TabLayoutMediator(binding.settingTablayout, binding.settingViewpager, (tab, position) -> {
tab.setText(titles[position]);
}).attach();
使用Viewpager2时的屏幕截图
# 1 楼答案
从ViewPager迁移到ViewPager2书签\u边框
ViewPager2
是ViewPager
库的改进版本,它提供了增强的功能,并解决了使用ViewPager
的常见困难。如果您的应用程序已使用ViewPager
Follow this documentation