从 ViewPager 迁移到 ViewPager2 时出现问题
Problem when migrate from ViewPager to ViewPager2
这个 viewpager 已经 运行 完美了。
我想从 viewpager 迁移到 viewpager2。但是当我滚动 viewpager2 left/right 时出现问题,片段中的表有时出现有时不出现。我的代码有问题吗?
ViewPager(old) - 这是 运行 完美
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);
}
}
SettingAdapter 从 onCreateView 调用 Fragment(旧)
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;
}
}
SettingAdapter 从 onCreateView 调用 Fragment(新)
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时的截图
Table is invisible
Table is visible
从 ViewPager 迁移到 ViewPager2bookmark_border
ViewPager2
是 ViewPager
库的改进版本,它提供了增强的功能并解决了使用 ViewPager
时的常见问题。如果您的应用已经使用 ViewPager
.
这个 viewpager 已经 运行 完美了。
我想从 viewpager 迁移到 viewpager2。但是当我滚动 viewpager2 left/right 时出现问题,片段中的表有时出现有时不出现。我的代码有问题吗?
ViewPager(old) - 这是 运行 完美
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);
}
}
SettingAdapter 从 onCreateView 调用 Fragment(旧)
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;
}
}
SettingAdapter 从 onCreateView 调用 Fragment(新)
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时的截图
Table is invisible Table is visible
从 ViewPager 迁移到 ViewPager2bookmark_border
ViewPager2
是 ViewPager
库的改进版本,它提供了增强的功能并解决了使用 ViewPager
时的常见问题。如果您的应用已经使用 ViewPager
.