คุณจะได้รับหมายเลขหน้าปัจจุบันของ ViewPager สำหรับ Android ได้อย่างไร


84

ฉันต้องการทราบตำแหน่งหน้าปัจจุบันของไฟล์ViewPager. ฉันสร้างอะแดปเตอร์และตั้งค่าอะแดปเตอร์นี้เป็นไฟล์ViewPager. ตอนนี้ฉันต้องการทราบหมายเลขหน้าปัจจุบันหรือตำแหน่งของมุมมองปัจจุบันเพราะฉันต้องการเริ่มเหตุการณ์พิเศษบางอย่างในหน้านั้น

ฉันใช้viewPager.setCurrentItem(1);สำหรับการตั้งค่ารายการแรก

มีวิธีที่คล้ายกันในการรับหน้าปัจจุบันหรือไม่?

คำตอบ:


180

ในแพ็คเกจล่าสุดที่คุณสามารถใช้ได้

vp.getCurrentItem()

หรือ

vp คือ viewPager

pageListener = new PageListener();
vp.setOnPageChangeListener(pageListener);

คุณต้องใส่ฟังก์ชั่นเปลี่ยนหน้าสำหรับ viewPager ของคุณ ไม่มีเมธอดใน viewPager เพื่อรับเพจปัจจุบัน

private int currentPage;

    private static class PageListener extends SimpleOnPageChangeListener{
            public void onPageSelected(int position) {
                Log.i(TAG, "page selected " + position);
                   currentPage = position;
        }
    }

ขอบคุณมาก.. ได้ผล.. เคยทำงานที่ ViewPager มาก่อนหรือไม่
sam_k

@Necronet ไม่มันไม่ควร คลาส PageListener ควรเป็นคลาสภายในไม่ใช่คลาสที่ซ้อนกัน
dcow

บางครั้งฉันมีข้อยกเว้นตัวชี้ว่างในตอนต้นของภาพเพจเจอร์สำหรับโซลูชันที่เชื่อถือได้มากขึ้นฉันแนะนำสิ่งนี้มันใช้ได้ดีสำหรับฉัน stackoverflow.com/a/13831450/2296787
MBH

setOnPageChangeListener()เลิกใช้แล้วให้ใช้addOnPageChangeListener()แทน
ZzZombo

47

มีวิธีการobject_of_ViewPager.getCurrentItem()คืนตำแหน่งของเพจเจอร์มุมมองที่ดูอยู่ในปัจจุบัน


ฉันโพสต์คำตอบนี้เป็นครั้งแรกที่ @ChuckBoris แต่ดูเหมือนว่าคนนี้จะรวบรวมคะแนนเสียงมากกว่าและเห็นได้ชัดว่าเป็นการรับรอง วิธีที่แปลกคือเว็บไซต์นี้ :)
devanshu_kaushik

17

หากคุณต้องการเพียงตำแหน่งvp.getCurrentItem()จะมอบให้คุณไม่จำเป็นต้องใช้ onPageChangeListener () เพื่อการนั้นเพียงอย่างเดียว


8

คุณจะพบว่า setOnPageChangeListener เลิกใช้แล้วให้ใช้ addOnPageChangeListener ดังต่อไปนี้:

ViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
    @Override
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

    }

    @Override
    public void onPageSelected(int position) {
       if(position == 1){  // if you want the second page, for example
           //Your code here
       }
    }

    @Override
    public void onPageScrollStateChanged(int state) {

    }
});

7

สำหรับปัญหานี้ Onpagechange listener เป็นสิ่งที่ดีที่สุด แต่มันจะมีข้อผิดพลาดเล็ก ๆ อย่างหนึ่งคือจะตรวจไม่พบเวลาเริ่มต้นของตำแหน่งที่ 0 เมื่อคุณเปลี่ยนหน้าจะเริ่มตรวจจับตำแหน่งหน้าที่เลือก ... สำหรับสิ่งนี้ ปัญหาฉันคิดว่าวิธีแก้ปัญหาที่ง่ายที่สุด

1. คุณต้องรักษาค่าตำแหน่งที่เลือกไว้แล้วจึงใช้ ....
2. กรณีที่ 1: ที่ตำแหน่งเริ่มต้นจะเป็นศูนย์เสมอ ....
กรณีที่ 2: สมมติว่าคุณตั้งค่ารายการปัจจุบันหมายความว่าคุณจะตั้งค่านั้น คุณค่าในการรักษาตำแหน่ง 3 จาก
นั้นดำเนินการของคุณด้วยการใช้การรักษานั้นในกิจกรรมของคุณ ...

Public int maintain=0;
myViewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
        @Override
        public void onPageScrolled(int i, float v, int i2) {
             //Toast.makeText(MyActivity.this, i+"  Is Selected  "+data.size(), Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onPageSelected( int i) {
          // here you will get the position of selected page
            maintain = i;


        }

        @Override
        public void onPageScrollStateChanged(int i) {

        }
    });


updateButton.setOnClickListener(new OnClickListener() {

        @Override
        public void onClick(View v) {

            Toast.makeText(MyActivity.this, i+"  Is Selected  "+data.size(), Toast.LENGTH_SHORT).show();
            data.set(maintain, "Replaced "+maintain);         
            myViewPager.getAdapter().notifyDataSetChanged();
        }
    });

1
setOnPageChangeListener เลิกใช้แล้ว ใช้ addOnPageChangeListener แทน setOnPageChangeListener
Selin

6

getCurrentItem()ไม่ได้ให้ตำแหน่งที่ถูกต้องสำหรับหน้าแรกและหน้าสุดท้ายที่ฉันแก้ไขโดยเพิ่มรหัสนี้:

public void CalcPostion() {    
    current = viewPager.getCurrentItem();

    if ((last == current) && (current != 1) && (current != 0)) {
        current = current + 1;
        viewPager.setCurrentItem(current);
    }
    if ((last == 1) && (current == 1)) {
        last = 0;
        current = 0;
    }
    display();
    last = current;
}

5

ไม่มีเมธอด getCurrentItem () ใน viewpager.i ได้ตรวจสอบ API แล้ว


3
คุณต้องอัปเดตแพ็คเกจความเข้ากันได้ใน Android SDK Manager จากนั้นคุณจะได้รับวิธีนั้นเท่านั้น
krisDrOid

5

setOnPageChangeListener ()วิธีการเลิก ใช้ addOnPageChangeListener (OnPageChangeListener)แทน

คุณสามารถใช้OnPageChangeListenerและรับตำแหน่งภายในonPageSelected()เมธอดนี่คือตัวอย่าง:

   viewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

        }

        @Override
        public void onPageSelected(int position) {
            Log.d(TAG, "my position is : " + position); 
        }

        @Override
        public void onPageScrollStateChanged(int state) {

        }
    });

หรือใช้getCurrentItem ()เพื่อรับตำแหน่งจริง:

viewPager.getCurrentItem();
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.