Jak programowo wyświetlić następny widok w ViewPager?


107

Utworzyłem ViewPager i wszystko działa dobrze, jednak chcę mieć poprzedni następny przycisk poza ViewPager, który może być używany do nawigacji wewnątrz ViewPager. Jak mogę przejść do następnego elementu w ViewPager bez ręcznego przesuwania?


39
Czy to nie działa viewpager.setCurrentItem (int index); ?
blessenm

tak, przypuszczam, że to pytanie jest duplikatem.
Vaibhav Mishra

Odpowiedzi:


154

Jak odpowiedział Blessenm, viewpager.setCurrentItem(int index)jest droga do zrobienia.


5
Niestety, mam inne zachowanie, gdy użytkownik przesuwa palcem ręcznie i kiedy skaczę za pomocą setCurrentItem. Kolejność wywołań jest odwrócona. Kiedy przesuwam, najpierw wywołuje OnPageChangeListener # onPageSelected, a następnie wywołuje we fragmentach setUserVisibleHint. Jeśli używam setCurrentItem, najpierw wywołuje on we fragmentach setUserVisibleHint, a następnie wywołuje OnPageChangeListener # onPageSelected, co w moim przypadku jest naprawdę problemem: / więc miałem nadzieję, że znajdę sposób na zachowanie naturalnego zachowania, ale nadal programowo przechodzę na inną stronę .
AgentKnopf

@Vaibhav co jeśli chcę pokazać następny widok aktywności
Prabs

@AgentKnopf Czy udało Ci się znaleźć rozwiązanie tego problemu? Widzę również to dziwne zachowanie, ale nie mogę znaleźć sposobu na utrzymanie przepływu zwykłego przesunięcia, gdy programowo przełączam się do następnego / poprzedniego fragmentu.
Gil

@Gil Obawiam się, że nie - usunąłem programową zmianę bieżącego widoku i po prostu pozwoliłem sobie na przesuwanie. Jednak później całkowicie zmieniliśmy implementację, więc nie zajmowałem się dalej tym problemem.
AgentKnopf,

107

Kompletna implementacja tylko dla kompletności:

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

Możesz tego potrzebować. Na przykład, jeśli zmiana jest wywoływana przez kliknięcie, możesz użyć, (nextBt.getId() == view.id)aby dowiedzieć się, co ją spowodowało
Tomas Wolf

2
@Sagar mógł ustawić nasłuchiwanie kliknięć przycisku w xml, w takim przypadku musisz mieć parametr widoku, nawet jeśli go nie potrzebujesz.
Ashish Tanna

nie pojawia się animacja przesuwania strony?
Lavekush Agrawal

18

Najłatwiej jest:

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

Zauważ, że to nie działa z ViewPager2.
Micer

0

Naprawię to Lepiej, ty 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);
        }
    }
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.