【问题标题】:Androidx ViewPager2 incompatible types: ViewPagerAdapter cannot be converted to AdapterAndroidx ViewPager2 不兼容类型:ViewPagerAdapter 无法转换为 Adapter
【发布时间】:2020-03-22 23:35:00
【问题描述】:

我正在使用 ViewPager2,我在 viewPager2.setAdapter 上收到以下错误:

不兼容的类型:ViewPagerAdapter 无法转换为 Adapter

主要活动

viewPagerAdapter = new ViewPagerAdapter(getSupportFragmentManager(),fragmentList);
viewPager2.setAdapter(viewPagerAdapter);

ViewPagerAdapter

public class ViewPagerAdapter extends FragmentStatePagerAdapter {

    private List<PagerFragment> fragments;


    public ViewPagerAdapter(FragmentManager fm, List<PagerFragment> fragments) {
        super(fm);
        this.fragments = fragments;
    }

    /* (non-Javadoc)
     * @see android.support.v4.app.FragmentPagerAdapter#getItem(int)
     */
    @Override
    public Fragment getItem(int position) {
        return this.fragments.get(position);
    }

    /* (non-Javadoc)
     * @see android.support.v4.view.PagerAdapter#getCount()
     */
    @Override
    public int getCount() {
        return this.fragments.size();
    }
}

【问题讨论】:

    标签: java android androidx android-jetpack android-viewpager2


    【解决方案1】:

    您正在尝试将ViewPager v1 适配器与ViewPager2 一起使用。你应该转换你的适配器来实现FragmentStateAdapter

    请参阅this section of the migration documentation 了解更多信息。特别是,您需要将getCount 方法重命名为getItemCount,并将getItem 重命名为createFragment,并使其每次都返回一个新的Fragment,而不是重复使用实例。

    【讨论】:

      【解决方案2】:
      public class ViewPagerAdapter extends FragmentPagerAdapter {
      
      private ArrayList<Fragment> fragments;
      private ArrayList<String> titles;
      
      public ViewPagerAdapter(FragmentManager fm){
          super(fm);
          this.fragments=new ArrayList<>();
          this.titles=new ArrayList<>();
      
      }
      
      
      @NonNull
      @Override
      public Fragment getItem(int position) {
          return fragments.get(position);
      }
      
      @Override
      public int getCount() {
          return fragments.size();
      }
      
      
      public void addFragment(Fragment fragment, String title){
      
          fragments.add(fragment);
          titles.add(title);
      
      }
      
      @Nullable
      @Override
      public CharSequence getPageTitle(int position) {
          return titles.get(position);
      }
      

      }

      【讨论】:

      • 感谢@shimma,但我正在尝试使用 viewpager2 适配器,我认为 FragmentPagerAdapter 属于 viewPager1。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-27
      • 2017-10-03
      • 2021-12-20
      • 2016-10-17
      • 1970-01-01
      相关资源
      最近更新 更多