Android için bir ViewPager'ın geçerli sayfa numarasını nasıl alırsınız?


84

Öğesinin geçerli sayfa konumunu bilmek istiyorum ViewPager. Bir adaptör oluşturuyorum ve bu adaptörü ViewPager. Şimdi geçerli sayfa numarasını veya mevcut görünümün konumunu bilmek istiyorum, çünkü o belirli sayfada bazı ekstra etkinlikler başlatmak istiyorum.

viewPager.setCurrentItem(1);İlk öğeyi ayarlamak için kullandım .

Mevcut sayfayı almak için benzer bir yöntem var mı?

Yanıtlar:


180

son paketlerde de kullanabilirsiniz

vp.getCurrentItem()

veya

vp, viewPager'dır,

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

viewPager'ınız için bir sayfa değişikliği dinleyicisi koymanız gerekir. ViewPager'da geçerli sayfayı almak için bir yöntem yoktur.

private int currentPage;

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

Çok teşekkürler dostum .. çalışıyor..Daha önce ViewPager üzerinde çalıştınız mı?
sam_k

@ Necronet hayır, olmamalı. PageListener sınıfı, iç içe geçmiş bir sınıf değil, bir iç sınıf olmalıdır.
dcow

Bazen çağrı cihazı görüntülerinin başında boş işaretçi istisnası var, daha güvenilir çözümler için bunu öneriyorum, benim için iyi çalışıyor. stackoverflow.com/a/13831450/2296787
MBH

setOnPageChangeListener()kullanımdan kaldırıldı, addOnPageChangeListener()bunun yerine kullanın.
ZzZombo

47

Şu object_of_ViewPager.getCurrentItem()anda görüntülenen sayfa görüntüleme sayfasının konumunu döndüren bir yöntem var


Aslında bu cevabı önce @ChuckBoris yayınladım, yine de bu daha fazla oy almış ve görünüşe göre bir onay almış gibi görünüyor. Garip bu sitenin yolları :)
devanshu_kaushik

17

Yalnızca konumu vp.getCurrentItem()istiyorsanız, size verecektir, onPageChangeListener () işlevini yalnızca bu amaç için uygulamaya gerek yoktur.


8

SetOnPageChangeListener'ın kullanımdan kaldırıldığını anlayacaksınız, addOnPageChangeListener'ı aşağıdaki gibi kullanın:

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

Bu sorun için Onpagechange dinleyicisi en iyisidir Ama aynı zamanda küçük bir hatası olacak, yani 0. konumun başlangıç ​​zamanını algılamayacak. Sayfayı değiştirdiğinizde, Sayfa seçilen konumunu algılamaya başlayacaktır ... Bunun için sorun en kolay çözümü buluyorum

1. Seçilen konum değerini korumalı ve sonra kullanmalısınız ....
2. Durum 1: Konumun başlangıcında her zaman Sıfırdır ....
Durum 2: Mevcut öğeyi ayarlarsanız, bunu ayarlayacağınızı varsayalım.
Konumunuzu korumaya değer verin 3. Ardından faaliyetinizi sürdürmek için eyleminizi yapın ...

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 kullanımdan kaldırıldı. SetOnPageChangeListener yerine addOnPageChangeListener kullanın.
Selin

6

getCurrentItem(), aslında bu kodu ekleyerek düzelttiğim ilk ve son sayfa için doğru konumu vermiyor:

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

Viewpager.i'de herhangi bir getCurrentItem () yöntemi yok API'yi zaten kontrol etti


3
Android SDK Manager'da uyumluluk paketini güncellemeniz gerekir, o zaman yalnızca bu yöntemi alırsınız.
krisDrOid

5

SetOnPageChangeListener () metodu önerilmemektedir. Kullanım addOnPageChangeListener (OnPageChangeListener) yerine.

OnPageChangeListener'ı kullanabilir ve onPageSelected()yöntemi içindeki konumu elde edebilirsiniz , bu bir örnektir:

   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) {

        }
    });

Veya gerçek konumu elde etmek için sadece getCurrentItem () kullanın:

viewPager.getCurrentItem();
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.