AndroidX中如何用fragments实现ViewPager

How to implement ViewPager with fragments in AndroidX

自从 Google 引入 androidX 以来,我在使用 viewpager 时遇到了问题。我想制作一个可以在片段之间滑动的选项卡布局。 getSupportFragmentManager() 现在已弃用并显示错误

ViewPagerAdapter(FragmentManager, int) in ViewPagerAdapter cannot be applied to (FragmentManager)

这是我的适配器:

public class ViewPagerAdapter extends FragmentPagerAdapter {

    public ViewPagerAdapter(@NonNull FragmentManager fm, int behavior) {
        super(fm, behavior);
    }

    @NonNull
    @Override
    public Fragment getItem(int position) {
        switch (position) {
            case 0:
                return new RecentFragment();
            case 1:
                return new TracksFragment();
            case 2:
                return new AlbumFragment();
            case 3:
                return new GenresFragment();
        }
        return null;
    }

    @Override
    public int getCount() {
        return 4;
    }
}

在我的 activity 中我需要调用它

 ViewPager viewPager = findViewById(R.id.view_pager);
 viewPager.setAdapter(new ViewPagerAdapter(getSupportFragmentManager());

我找到了解决方案,在构造函数中我有第二个参数,在 viewpager 中我添加了页面位置并且工作正常。

public static int PAGE_POSITION = 4;

 ViewPager viewPager = findViewById(R.id.view_pager);

viewPager.setAdapter(new ViewPagerAdapter(getSupportFragmentManager(), PAGE_POSITION));
TabLayout tab = findViewById(R.id.tab_layout);
tab.setupWithViewPager(viewPager); 

改用getChildFragmentManager

使用 ViewPager2 创建滑动视图并且适配器 class 必须扩展 FragmentStateAdapter。 例如:

  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    SectionsPagerAdapter sectionsPagerAdapter = new SectionsPagerAdapter(this);
    final ViewPager2 viewPager = findViewById(R.id.pager);
    TabLayout tabs = findViewById(R.id.tab_layout);
    viewPager.setAdapter(sectionsPagerAdapter);
    new TabLayoutMediator(tabs, viewPager,
            new TabLayoutMediator.TabConfigurationStrategy() {
                @Override
                public void onConfigureTab(@NonNull TabLayout.Tab tab, int position) {
                    tab.setText("OBJECT " + (position + 1));
                   viewPager.setCurrentItem(tab.getPosition(),true);
                }
            }
    ).attach();

}

您的 ViewPagerAdapter class 有一个带有 2 个参数的构造函数。
当您尝试创建一个新的 ViewPagerAdapter 时,您只使用了 1 个参数。
这正是错误消息告诉您的内容。

查看 FragmentPagerAdapter class 的文档,看看第二个参数应该是什么。