Android ViewPager - динамически загружать три страницы одновременно - PullRequest
0 голосов
/ 01 февраля 2020

Я сделал приложение iOS и пытаюсь сделать версию для Android.

В приложении есть «посты», которые организованы по дате. На iOS у меня есть UIPageViewController, который позволяет смахивать влево для просмотра предыдущих сообщений.

UIPageViewController просто просит предоставить контроллер представления слева и справа от текущего представления в любой данный момент. время. Это прекрасно, потому что они могут go включаться бесконечно.

Android ViewPager застрял у меня. Вместо того, чтобы запрашивать левый и правый вид, например iOS, он запрашивает общий счет - хотя у меня нет общего счета, поскольку он теоретически бесконечен.

Я попытался добавить фрагмент в начало списка всякий раз, когда ViewPager достигает «0-го» индекса, затем вызывается notifyDatasetChanged, но он не загружает новый фрагмент, и, если я пытаюсь провести пальцем назад, он выдает Can't change tag of fragment.

Вот соответствующие фрагменты кода:

//HomePagerAdapter.java
public class HomePagerAdapter extends FragmentPagerAdapter implements ViewPager.OnPageChangeListener {
    List<HomeViewFragment> fragments = new ArrayList<>();

    public HomePagerAdapter(FragmentManager fm) {
        super(fm);

        //Add two initially (the viewPager gets set to position 1 at the start)
        fragments.add(new HomeViewFragment());
        fragments.add(new HomeViewFragment());
    }

    @Override
    public Fragment getItem(int position) {
        return fragments.get(position);
    }

    @Override
    public int getCount() {
        return fragments.size();
    }

    public void onPageSelected(int position) {
        Log.w("Debug", position + "");
        if (position == 0) {
            fragments.add(0, new HomeViewFragment());
            notifyDataSetChanged();
        }
    }

}

Насколько я понимаю, это потому, что он думает, что он все еще находится в позиции 0, но на самом деле он находится в позиции 1, потому что я добавил фрагмент налево. Поэтому, когда он устанавливает страницу в положение 1, он обнаруживает, что это та же страница, на которой он уже находился, и выдает ошибку.

Каков наилучший способ сделать что-то подобное, где у меня практически бесконечный количество фрагментов, но я хочу загрузить только несколько одновременно. Более того, есть ли способ настроить его, как UIPageViewController, поэтому мне нужно только загрузить влево и вправо?

...