Wie kann ich die nächste Ansicht in ViewPager programmgesteuert anzeigen?

107

Ich habe einen ViewPager erstellt und alles funktioniert einwandfrei. Ich möchte jedoch eine vorherige Schaltfläche "Weiter" außerhalb von ViewPager haben, mit der Sie in ViewPager navigieren können. Wie kann ich zum nächsten Element in ViewPager wechseln, ohne manuell zu wischen?

Vaibhav Mishra
quelle
39
Funktioniert das nicht viewpager.setCurrentItem (int index); ?
Blessenm
Ich nehme an, diese Frage ist ein Duplikat.
Vaibhav Mishra
1
Mögliches Duplikat von Wie ändere ich die ViewPager-Seite?
mmd1080

Antworten:

154

Wie Blessenm antwortete, viewpager.setCurrentItem(int index)ist der Weg zu gehen.

Vaibhav Mishra
quelle
5
Leider bekomme ich ein anderes Verhalten, wenn der Benutzer manuell wischt und wenn ich mit setCurrentItem springe. Die Reihenfolge der Anrufe ist umgekehrt. Wenn ich wische, ruft es zuerst OnPageChangeListener # onPageSelected auf und ruft dann setUserVisibleHint in den Fragmenten auf. Wenn ich setCurrentItem verwende, ruft es zuerst setUserVisibleHint in den Fragmenten auf und dann OnPageChangeListener # onPageSelected, was in meinem Fall wirklich ein Problem ist: / Ich hatte gehofft, einen Weg zu finden, das natürliche Verhalten beizubehalten, aber trotzdem programmgesteuert auf eine andere Seite zu wechseln .
AgentKnopf
@ Vaibhav was ist, wenn ich die nächste Ansicht der Aktivität zeigen möchte
Prabs
@AgentKnopf Haben Sie es geschafft, eine Lösung für dieses Problem zu finden? Ich sehe auch dieses seltsame Verhalten, kann aber keinen Weg finden, den Fluss des regulären Wischens aufrechtzuerhalten, wenn ich programmgesteuert zum nächsten / vorherigen Fragment wechsle.
Gil
@ Gil Ich fürchte nicht - ich habe die programmatische Änderung der aktuellen Ansicht entfernt und nur das Wischen erlaubt. Wir haben die Implementierung jedoch später komplett geändert, sodass ich dieses Problem nicht weiter verfolgt habe.
AgentKnopf
107

Eine vollständige Implementierung nur der Vollständigkeit halber:

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);
}
Androiderson
quelle
Du könntest es brauchen. Wenn die Änderung beispielsweise durch einen Klick ausgelöst wird, können Sie (nextBt.getId() == view.id)wissen, was sie verursacht hat
Tomas Wolf,
2
@Sagar Möglicherweise hat er den Klick-Listener der Schaltfläche in XML festgelegt. In diesem Fall müssen Sie den Ansichtsparameter haben, auch wenn Sie ihn nicht benötigen.
Ashish Tanna
Animation zum Wischen von Seiten kommt nicht?
Lavekush Agrawal
18

Der einfachste Weg ist:

nextButton.setOnClickListener { pager.arrowScroll(View.FOCUS_RIGHT) }
prevButton.setOnClickListener { pager.arrowScroll(View.FOCUS_LEFT) }
Pitel
quelle
Beachten Sie, dass dies nicht funktioniert ViewPager2.
Micer
0

Ich repariere es besser, 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);
        }
    }
Arman
quelle