आपको Android के लिए ViewPager का वर्तमान पृष्ठ नंबर कैसे मिलेगा?


84

मैं वर्तमान पृष्ठ की स्थिति जानना चाहता हूं ViewPager। मैं एक एडेप्टर बनाता हूं और इस एडॉप्टर को सेट करता हूं ViewPager। अब मैं वर्तमान पृष्ठ संख्या या वर्तमान दृश्य की स्थिति जानना चाहता हूं, क्योंकि मैं उस विशेष पृष्ठ पर कुछ अतिरिक्त घटनाओं को शुरू करना चाहता हूं।

मैंने viewPager.setCurrentItem(1);पहले आइटम सेट करने के लिए उपयोग किया ।

क्या वर्तमान पृष्ठ प्राप्त करने के लिए एक समान विधि है?

जवाबों:


180

नवीनतम पैकेजों में भी आप उपयोग कर सकते हैं

vp.getCurrentItem()

या

vp व्यूगर है,

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

@ नहीं, यह नहीं होना चाहिए। पेजलिस्टर वर्ग एक आंतरिक वर्ग होना चाहिए, न कि एक नेस्टेड वर्ग।
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 श्रोता सबसे अच्छा है, लेकिन इसमें एक छोटी सी गलती भी होगी जो यह है कि 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 के बजाय करें।
सेलिन

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

Viewpager.i में कोई विधि getCurrentItem () नहीं है। पहले से ही एपीआई की जाँच की


3
आपको एंड्रॉइड एसडीके प्रबंधक में संगतता पैकेज को अपडेट करना होगा, फिर केवल उस विधि को प्राप्त करें।
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();
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.