Bagaimana cara secara terprogram menampilkan tampilan berikutnya di ViewPager?

107

Saya membuat ViewPager dan semuanya berfungsi dengan baik, namun saya ingin memiliki tombol berikutnya di luar ViewPager yang dapat digunakan untuk menavigasi di dalam ViewPager. Bagaimana saya bisa pergi ke Item berikutnya di ViewPager tanpa menggesek secara manual?

Vaibhav Mishra
sumber
39
Apakah ini tidak berfungsi viewpager.setCurrentItem (int index); ?
blessenm
ya, saya kira pertanyaan ini adalah duplikat.
Vaibhav Mishra
1
Kemungkinan duplikat dari Bagaimana mengubah halaman ViewPager?
mmd1080

Jawaban:

154

Seperti berkat yang dijawab viewpager.setCurrentItem(int index)adalah jalan yang harus ditempuh.

Vaibhav Mishra
sumber
5
Sayangnya saya mendapatkan perilaku yang berbeda, saat pengguna menggeser secara manual dan saat saya melompat menggunakan setCurrentItem. Urutan panggilan dibalik. Saat saya menggeser, pertama-tama akan memanggil OnPageChangeListener # onPageSelected dan kemudian memanggil setUserVisibleHint di fragmen. Jika saya menggunakan setCurrentItem, pertama-tama memanggil setUserVisibleHint dalam fragmen dan kemudian memanggil OnPageChangeListener # onPageSelected, yang benar-benar menjadi masalah dalam kasus saya: / jadi saya berharap menemukan cara untuk menjaga perilaku alami tetapi masih secara terprogram pindah ke halaman lain .
AgentKnopf
@Vaibhav bagaimana jika saya ingin menunjukkan tampilan aktivitas berikutnya
Prabs
@AgentKnopf Apakah Anda berhasil menemukan solusi untuk masalah ini? Saya juga melihat perilaku aneh ini tetapi tidak dapat menemukan cara untuk menjaga aliran gesekan reguler saat saya secara terprogram beralih ke fragmen berikutnya / sebelumnya.
Gil
@ Gil, saya khawatir tidak - saya menghapus perubahan terprogram dari tampilan saat ini dan hanya mengizinkan gesekan. Namun kami benar-benar mengubah penerapannya nanti jadi saya tidak melanjutkan masalah ini lebih jauh.
AgentKnopf
107

Implementasi lengkap hanya untuk kelengkapan:

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
sumber
Anda mungkin membutuhkannya. Misalnya, jika perubahan dipicu oleh klik, Anda dapat menggunakan (nextBt.getId() == view.id)untuk mengetahui apa yang menyebabkannya
Tomas Wolf
2
@Sagar dia mungkin telah menyetel pemroses klik tombol dalam xml, dalam hal ini Anda harus memiliki parameter tampilan, bahkan jika Anda tidak membutuhkannya.
Ashish Tanna
animasi menggesek halaman tidak datang?
Lavekush Agrawal
18

Cara termudah adalah:

nextButton.setOnClickListener { pager.arrowScroll(View.FOCUS_RIGHT) }
prevButton.setOnClickListener { pager.arrowScroll(View.FOCUS_LEFT) }
Pitel
sumber
Perhatikan bahwa ini tidak berfungsi ViewPager2.
Micer
0

saya memperbaikinya lebih baik, 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
sumber