有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

从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时的屏幕截图

Table is invisible Table is visible


共 (1) 个答案

  1. # 1 楼答案

    从ViewPager迁移到ViewPager2书签\u边框

    ViewPager2ViewPager库的改进版本,它提供了增强的功能,并解决了使用ViewPager的常见困难。如果您的应用程序已使用ViewPager

    Follow this documentation