Как программно показать следующий вид в ViewPager?

107

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

Вайбхав Мишра
источник
39
Не работает viewpager.setCurrentItem (int index); ?
blessenm
да, я полагаю, это дублированный вопрос.
Вайбхав Мишра
1
Возможный дубликат Как изменить страницу ViewPager?
mmd1080

Ответы:

154

Как ответил blessenm, viewpager.setCurrentItem(int index)это путь.

Вайбхав Мишра
источник
5
К сожалению, у меня другое поведение, когда пользователь смахивает вручную, а я прыгаю с помощью setCurrentItem. Порядок звонков обратный. Когда я смахиваю, он сначала вызывает OnPageChangeListener # onPageSelected, а затем вызывает setUserVisibleHint во фрагментах. Если я использую setCurrentItem, он сначала вызывает setUserVisibleHint во фрагментах, а затем вызывает OnPageChangeListener # onPageSelected, что действительно является проблемой в моем случае: / поэтому я надеялся найти способ сохранить естественное поведение, но все же программно перейти на другую страницу .
AgentKnopf 06
@Vaibhav а что, если я хочу показать следующий вид активности
Prabs
@AgentKnopf Удалось ли вам найти решение этой проблемы? Я также вижу это странное поведение, но не могу найти способ сохранить поток обычного смахивания, когда я программно переключаюсь на следующий / предыдущий фрагмент.
Гил
@Gil Боюсь, что нет - я убрал программную смену текущего вида и разрешил только пролистывание. Однако позже мы полностью изменили реализацию, поэтому я больше не занимался этой проблемой.
AgentKnopf 02
107

Полная реализация только для полноты:

public void MoveNext(View view) {
    //it doesn't matter if you're already in the last item
    pager.setCurrentItem(pager.getCurrentItem() + 1);
}

public void MovePrevious(View view) {
    //it doesn't matter if you're already in the first item
    pager.setCurrentItem(pager.getCurrentItem() - 1);
}
Андроидерсон
источник
Вам это может понадобиться. Например, если изменение вызвано щелчком мыши, вы можете использовать, (nextBt.getId() == view.id)чтобы узнать, что его вызвало
Томас Вольф,
2
@Sagar он мог бы установить прослушиватель нажатия кнопки в xml, в этом случае у вас должен быть параметр просмотра, даже если он вам не нужен.
Ашиш Танна
не появляется анимация перелистывания страницы?
Лавекуш Агравал
18

Самый простой способ:

nextButton.setOnClickListener { pager.arrowScroll(View.FOCUS_RIGHT) }
prevButton.setOnClickListener { pager.arrowScroll(View.FOCUS_LEFT) }
Pitel
источник
Обратите внимание, что это не работает с ViewPager2.
Micer
0

Я исправлю это Лучше, ты Андроидерсон.

  private void MoveNextTopSlideShow(View view)
    {
        if (_viewPager_TopImageSlide.CurrentItem == _viewPager_TopImageSlide.ChildCount)
        {
            if (_viewPager_TopImageSlide.ChildCount > 0)
            {
                _viewPager_TopImageSlide.SetCurrentItem(0,true);
            }
        }
        else
        {
            //it doesn't matter if you're already in the last item
            _viewPager_TopImageSlide.SetCurrentItem(_viewPager_TopImageSlide.CurrentItem + 1, true);
        }
    }

    private void MovePreviousTopSlideShow(View view)
    {
        if (_viewPager_TopImageSlide.CurrentItem == 0)
        {
            if (_viewPager_TopImageSlide.ChildCount > 0)
            {
                _viewPager_TopImageSlide.SetCurrentItem(_viewPager_TopImageSlide.ChildCount-1, true);
            }
        }
        else
        {
            //it doesn't matter if you're already in the first item
            _viewPager_TopImageSlide.SetCurrentItem(_viewPager_TopImageSlide.CurrentItem - 1, true);
        }
    }
Арман
источник