ViewPager'da sonraki görünümü programlı olarak nasıl gösterebilirim?


107

Bir ViewPager oluşturdum ve her şey yolunda gidiyor, ancak ViewPager'ın dışında ViewPager içinde gezinmek için kullanılabilecek bir önceki bir sonraki düğmeye sahip olmak istiyorum. Manuel olarak kaydırmadan ViewPager'da sonraki Öğeye nasıl gidebilirim?


39
Bu işe yaramaz viewpager.setCurrentItem (int index); ?
blessenm

yaptı, sanırım bu soru bir kopya.
Vaibhav Mishra

Yanıtlar:


154

Kutsama cevapladığı gibi viewpager.setCurrentItem(int index) yolu.


5
Ne yazık ki, kullanıcı el ile kaydırdığında ve setCurrentItem kullanarak atladığımda farklı davranışlar görüyorum. Çağrıların sırası tersine çevrildi. Kaydırdığımda, önce OnPageChangeListener # onPageSelected'ı ve ardından fragmanlarda setUserVisibleHint'i çağırıyor. SetCurrentItem kullanırsam, önce parçalarda setUserVisibleHint'i çağırır ve sonra OnPageChangeListener # onPageSelected'ı çağırır ki bu benim durumumda gerçekten bir problemdir: / bu yüzden doğal davranışı korumanın bir yolunu bulmayı umuyordum ama yine de programlı olarak başka bir sayfaya geçmeyi umuyordum .
AgentKnopf

@Vaibhav ya bir sonraki etkinlik görünümünü göstermek
istersem

@AgentKnopf Bu sorun için bir çözüm bulmayı başardınız mı? Bu garip davranışı da görüyorum, ancak programlı olarak sonraki / önceki parçaya geçtiğimde normal kaydırmanın akışını sürdürmenin bir yolunu bulamıyorum.
Gil

@Gil Korkarım ki hayır - mevcut görünümün programlı olarak değiştirilmesini kaldırdım ve kaydırmaya izin verdim. Ancak uygulamayı daha sonra tamamen değiştirdik, bu yüzden bu konuyu daha fazla takip etmedim.
AgentKnopf

107

Tam tamlık için eksiksiz bir uygulama:

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

İhtiyacın olabilir. Örneğin, değişiklik bir tıklama ile tetiklendiyse, (nextBt.getId() == view.id)buna neyin sebep olduğunu öğrenmek için kullanabilirsiniz
Tomas Wolf

2
@Sagar, xml'de düğmenin tıklama dinleyicisini ayarlamış olabilir, bu durumda ihtiyacınız olmasa bile view parametresine sahip olmanız gerekir.
Ashish Tanna

sayfa kaydırma animasyonu gelmiyor mu?
Lavekush Agrawal

18

En kolay yol:

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

Bunun çalışmadığını unutmayın ViewPager2.
Micer

0

Ben daha iyi düzeltirim, 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);
        }
    }
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.