Androidx ViewPager2 несовместимые типы: ViewPagerAdapter не может быть преобразован в адаптер - PullRequest
0 голосов
/ 23 марта 2020

Я использую ViewPager2 и получаю следующую ошибку на viewPager2.setAdapter:

несовместимых типов: ViewPagerAdapter не может быть преобразован в адаптер

MainActivty

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

Ответы [ 2 ]

1 голос
/ 23 марта 2020
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);
}

}

1 голос
/ 23 марта 2020

Вы пытаетесь использовать адаптер ViewPager v1 с ViewPager2. Вместо этого следует преобразовать адаптер в FragmentStateAdapter.

См. в этом разделе документации по миграции для получения дополнительной информации. В частности, вы захотите переименовать ваш метод getCount в getItemCount, а также переименовать getItem в createFragment и заставить его каждый раз возвращать новый Fragment вместо повторного использования экземпляров.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...