Як програмно показати наступний вигляд у ViewPager?


107

Я створив ViewPager, і все працює нормально, проте я хочу мати попередню наступну кнопку поза ViewPager, яку можна використовувати для навігації в ViewPager. Як я можу перейти до наступного пункту на ViewPager, не маючи пальцем вручну?


39
Це не працює viewpager.setCurrentItem (int індекс); ?
blessenm

це було, я вважаю, це питання є дублікатом.
Вайбхав Мішра

1
Можливий дублікат Як змінити сторінку ViewPager?
mmd1080

Відповіді:


154

Як відповів blessenm viewpager.setCurrentItem(int index)- це шлях.


5
На жаль, у мене виникає інша поведінка, коли користувач провела пальцем вручну і коли стрибаю за допомогою setCurrentItem. Порядок дзвінків зворотний. Коли я проведу пальцем, він спочатку викликає OnPageChangeListener # onPageSelected, а потім викликає у фрагментах setUserVisibleHint. Якщо я використовую setCurrentItem, він спочатку викликає setUserVisibleHint у фрагментах, а потім викликає OnPageChangeListener # onPageSelected, що справді є проблемою в моєму випадку: / тому я сподівався знайти спосіб зберегти природну поведінку, але все ж програмно перейти на іншу сторінку .
AgentKnopf

@Vaibhav, що робити, якщо я хочу показати наступний погляд на діяльність
Prabs

@AgentKnopf Вам вдалося знайти вирішення цього питання? Я також бачу цю дивну поведінку, але не можу знайти спосіб утримувати регулярний потік, коли я програмно перемикаюся на наступний / попередній фрагмент.
Гіл

@Gil Боюсь, що не - я видалив програмну зміну поточного перегляду і просто дозволив провести пальцем. Однак ми повністю змінили реалізацію пізніше, тому я більше не займався цим питанням.
AgentKnopf

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)дізнатися, що це спричинило
Tomas Wolf

2
@Sagar він, можливо, встановив прослуховувач клацань кнопки в xml, у цьому випадку ви повинні мати параметр перегляду, навіть якщо він вам не потрібен.
Ashish Tanna

анімація сторінки при переході сторінки не надходить?
Lavekush Agrawal

18

Найпростіший спосіб:

nextButton.setOnClickListener { pager.arrowScroll(View.FOCUS_RIGHT) }
prevButton.setOnClickListener { pager.arrowScroll(View.FOCUS_LEFT) }

Зауважте, це не працює ViewPager2.
Місер

0

я виправлю це краще, введіть Androiderson.

  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);
        }
    }
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.