Открытые представления ViewPager за пределами максимального числа, установленного в адаптере фрагментов - PullRequest
0 голосов
/ 27 апреля 2020

Итак, у меня есть viewPager с 4 представлениями, доступ к которому я могу получить, проведя пальцем влево или вправо. Мой адаптер -

public class MyAdapter extends FragmentStatePagerAdapter {


    public MyAdapter(@NonNull FragmentManager fm, int behavior) {
        super(fm, behavior);
    }

    @Nullable
    @Override
    public Fragment getItem(int i) {
        switch (i){
            case 0:
                return new FirstFrag();
            case 1:
                return new SecondFrag();
            case 2:
                return new ThridFrag();
            case 3:
                return new FourthFrag();
            default:
                return null;
        }
    }

    @Override
    public int getCount() {
        return 3;
    }
}

Так как getCount () возвращает 3, следовательно, я могу видеть только три представления, что хорошо, и это прекрасно работает, но я go для четвертого представления, возможно, программно, за пределами фиксированного числа.

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

Мое решение было, подход, который я упомянул выше.

1 Ответ

0 голосов
/ 27 апреля 2020

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

Ваше решение

public class MyAdapter extends FragmentStatePagerAdapter {


    public MyAdapter(@NonNull FragmentManager fm, int behavior) {
        super(fm, behavior);
    }

    @Nullable
    @Override
    public Fragment getItem(int i) {
        switch (i){
            case 0:
                return new FirstFrag();  //View 1
            case 1:
                return new SecondFrag(); //View 2
            case 2:
                return new ThridFrag();  //View 3
//By indicating that getCount () return 3, this is all 3 views
            case 3:
                return new FourthFrag(); //View 4
            default:
                return null;
        }
    }
    @Override
    public int getCount () {
        return 4;
    }
}
...