Come mostrare a livello di codice la vista successiva in ViewPager?


107

Ho creato un ViewPager e tutto funziona correttamente, tuttavia desidero avere un pulsante successivo precedente al di fuori di ViewPager che può essere utilizzato per navigare all'interno di ViewPager. Come posso passare all'elemento successivo su ViewPager senza scorrere manualmente?


39
Non funziona viewpager.setCurrentItem (int index); ?
blessenm

lo ha fatto, suppongo che questa domanda sia un duplicato.
Vaibhav Mishra

Risposte:


154

Come ha risposto blessenm viewpager.setCurrentItem(int index)è la strada da percorrere.


5
Sfortunatamente ottengo un comportamento diverso, quando l'utente scorre manualmente e quando salto usando setCurrentItem. L'ordine delle chiamate è invertito. Quando scorro, prima chiama OnPageChangeListener # onPageSelected e poi chiama setUserVisibleHint nei frammenti. Se uso setCurrentItem, prima chiama setUserVisibleHint nei frammenti e poi chiama OnPageChangeListener # onPageSelected, che è davvero un problema nel mio caso: / quindi speravo di trovare un modo per mantenere il comportamento naturale ma passare comunque a un'altra pagina a livello di programmazione .
AgentKnopf

@Vaibhav e se volessi mostrare la prossima visione dell'attività
Prabs

@AgentKnopf Sei riuscito a trovare una soluzione a questo problema? Vedo anche questo strano comportamento ma non riesco a trovare un modo per mantenere il flusso del normale scorrimento quando passo a livello di programmazione al frammento successivo / precedente.
Gil

@ Gil, temo di no: ho rimosso la modifica programmatica della visualizzazione corrente e ho appena consentito lo scorrimento. Tuttavia abbiamo cambiato completamente l'implementazione in seguito, quindi non ho approfondito ulteriormente la questione.
AgentKnopf

107

Un'implementazione completa solo per completezza:

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

Potresti averne bisogno. Ad esempio, se la modifica viene attivata da un clic, è possibile utilizzare (nextBt.getId() == view.id)per sapere cosa l'ha causata
Tomas Wolf,

2
@Sagar potrebbe aver impostato il listener di clic del pulsante in xml, in quel caso devi avere il parametro view, anche se non ne hai bisogno.
Ashish Tanna

l'animazione di scorrimento della pagina non arriva?
Lavekush Agrawal

18

Il modo più semplice è:

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

Nota che questo non funziona con ViewPager2.
Micer

0

lo aggiusto meglio, 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);
        }
    }
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.