【问题标题】:How to implement ViewPager with fragments in AndroidX如何在 AndroidX 中使用 Fragments 实现 ViewPager
【发布时间】:2019-12-26 10:25:58
【问题描述】:

自从 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


    【解决方案1】:

    请改用getChildFragmentManager

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 是的,你是对的,它需要第二个参数,即页面位置。
      • 天哪,不要使用页面位置。当你开始时,位置是 0,所以它在技术上是正确的值,但是如果初始位置在某些时候不是 0 或 1,事情就会变得非常错误。阅读文档:developer.android.com/reference/androidx/fragment/app/…
      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2015-07-17
        • 2013-07-15
        • 1970-01-01
        • 2011-07-23
        • 1970-01-01
        • 2016-04-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多