Como mostrar programaticamente a próxima exibição no ViewPager?

107

Eu criei um ViewPager e tudo está funcionando bem, no entanto, quero ter um botão anterior próximo fora do ViewPager que pode ser usado para navegar dentro do ViewPager. Como posso ir para o próximo item no ViewPager sem passar o dedo manualmente?

Vaibhav Mishra
fonte
39
Isso não funciona viewpager.setCurrentItem (int index); ?
blessenm
sim, suponho que esta pergunta seja uma duplicata.
Vaibhav Mishra
1
Possível duplicata de Como alterar a página do ViewPager?
mmd1080

Respostas:

154

Como a bênção respondida viewpager.setCurrentItem(int index)é o caminho a percorrer.

Vaibhav Mishra
fonte
5
Infelizmente, obtenho um comportamento diferente, quando o usuário desliza manualmente e quando eu salto usando setCurrentItem. A ordem das chamadas é invertida. Quando eu deslizo, ele primeiro chama OnPageChangeListener # onPageSelected e, em seguida, chama setUserVisibleHint nos fragmentos. Se eu usar setCurrentItem, ele primeiro chama setUserVisibleHint nos fragmentos e, em seguida, chama OnPageChangeListener # onPageSelected, o que realmente é um problema no meu caso: / então eu esperava encontrar uma maneira de manter o comportamento natural, mas ainda ir programaticamente para outra página .
AgentKnopf
@Vaibhav e se eu quiser mostrar a próxima visão da atividade
Prabs de
@AgentKnopf Você conseguiu encontrar uma solução para este problema? Também vejo esse comportamento estranho, mas não consigo encontrar uma maneira de manter o fluxo do deslize normal quando alterno programaticamente para o fragmento seguinte / anterior.
Gil
@Gil Acho que não - removi a alteração programática da visualização atual e apenas permiti o deslize. No entanto, mudamos completamente a implementação mais tarde, então não levantei esse problema mais adiante.
AgentKnopf
107

Uma implementação completa apenas para integridade:

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
fonte
Você pode precisar. Por exemplo, se a alteração for acionada por um clique, você pode usar (nextBt.getId() == view.id)para saber o que a causou
Tomas Wolf,
2
@Sagar ele pode ter configurado o listener de clique do botão em xml, nesse caso você deve ter o parâmetro view, mesmo que não precise dele.
Ashish Tanna
animação página swiping não vem?
Lavekush Agrawal
18

A maneira mais fácil é:

nextButton.setOnClickListener { pager.arrowScroll(View.FOCUS_RIGHT) }
prevButton.setOnClickListener { pager.arrowScroll(View.FOCUS_LEFT) }
Pitel
fonte
Observe que isso não está funcionando ViewPager2.
Micer
0

eu conserto melhor, 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
fonte