如何在AndroidX中使用片段实现ViewPager

问题描述 投票:0回答:3

自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); 
android android-fragments android-viewpager
3个回答
0
投票

您的ViewPagerAdapter类具有一个带有2个参数的构造函数。尝试创建新的ViewPagerAdapter时,仅使用1个参数。错误消息告诉您的正是这些。

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


1
投票

改为使用getChildFragmentManager


0
投票

使用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();

}
© www.soinside.com 2019 - 2024. All rights reserved.