วิธีแสดงมุมมองถัดไปใน ViewPager โดยใช้โปรแกรม


107

ฉันสร้าง ViewPager และทุกอย่างทำงานได้ดีอย่างไรก็ตามฉันต้องการให้มีปุ่มถัดไปก่อนหน้านี้นอก ViewPager ซึ่งสามารถใช้เพื่อนำทางภายใน ViewPager ได้ ฉันจะไปที่รายการถัดไปบน ViewPager โดยไม่ต้องปัดนิ้วเองได้อย่างไร


39
ไม่ทำงาน viewpager.setCurrentItem (ดัชนี int); เหรอ?
blessenm

เป็นเช่นนั้นฉันคิดว่าคำถามนี้ซ้ำกัน
Vaibhav Mishra

คำตอบ:


154

ดังที่คำตอบของพรviewpager.setCurrentItem(int index)คือหนทางที่จะไป


5
น่าเสียดายที่ฉันมีพฤติกรรมที่แตกต่างออกไปเมื่อผู้ใช้ปัดนิ้วด้วยตนเองและเมื่อฉันกระโดดโดยใช้ setCurrentItem ลำดับของการโทรกลับ เมื่อฉันปัดมันจะเรียก OnPageChangeListener # onPageSelected เป็นครั้งแรกจากนั้นเรียกใช้ setUserVisibleHint ในเศษ ถ้าฉันใช้ setCurrentItem ขั้นแรกจะเรียก setUserVisibleHint ในแฟรกเมนต์จากนั้นเรียก OnPageChangeListener # onPageSelected ซึ่งเป็นปัญหาในกรณีของฉัน: / ดังนั้นฉันหวังว่าจะหาวิธีที่จะรักษาพฤติกรรมตามธรรมชาติ แต่ยังคงย้ายโปรแกรมไปที่หน้าอื่น .
AgentKnopf

@Vaibhav จะทำอย่างไรถ้าฉันต้องการแสดงมุมมองต่อไปของกิจกรรม
Prabs

@AgentKnopf คุณจัดการเพื่อหาวิธีแก้ปัญหานี้หรือไม่? ฉันยังเห็นพฤติกรรมแปลก ๆ นี้ แต่ไม่สามารถหาวิธีรักษาขั้นตอนการปัดปกติได้เมื่อฉันเปลี่ยนไปใช้ส่วนถัดไป / ก่อนหน้าโดยใช้โปรแกรม
Gil

@Gil ฉันไม่กลัว - ฉันลบการเปลี่ยนแปลงทางโปรแกรมของมุมมองปัจจุบันและอนุญาตให้รูดได้ อย่างไรก็ตามเราได้เปลี่ยนการใช้งานทั้งหมดในภายหลังดังนั้นฉันจึงไม่ได้ติดตามปัญหานี้เพิ่มเติม
AgentKnopf

107

การใช้งานที่สมบูรณ์เพื่อความสมบูรณ์:

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

คุณอาจต้องการมัน ตัวอย่างเช่นหากการเปลี่ยนแปลงเกิดขึ้นจากการคลิกคุณสามารถใช้(nextBt.getId() == view.id)เพื่อทราบว่าเกิดจากอะไร
Tomas Wolf

2
@Sagar เขาอาจตั้งค่า click listener ของปุ่มเป็น xml ในกรณีนั้นคุณต้องมีพารามิเตอร์ view แม้ว่าคุณจะไม่ต้องการก็ตาม
Ashish Tanna

ภาพเคลื่อนไหวการปัดหน้าไม่มา?
Lavekush Agrawal

18

วิธีที่ง่ายที่สุดคือ:

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

ViewPager2หมายเหตุนี้ไม่ได้ทำงานกับ
Micer

0

ฉันแก้ไขให้ดีขึ้น 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);
        }
    }
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.