繁体   English   中英

如何在 AndroidX 中使用片段实现 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;
    }
}

在我的活动中,我需要调用它

 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 创建滑动视图,并且适配器类必须扩展 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类有一个带有 2 个参数的构造函数。
当您尝试创建新的ViewPagerAdapter ,您只使用 1 个参数。
这正是错误消息告诉您的内容。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM