जब ViewPager पृष्ठ बदलता है तो निर्धारित करें


146

मेरे पास एक ViewPager के अंदर तीन पृष्ठ (टुकड़े) हैं, हालांकि मैं केवल उन दो पृष्ठों के लिए एक मेनू आइटम प्रदर्शित करना चाहता हूं।

पिछले SO उत्तर में दिया गया कोड काम नहीं करता है:

@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
    super.setUserVisibleHint(isVisibleToUser);

    if (isVisibleToUser == true) { }
    else if (isVisibleToUser == false) {  }

}

ग्रहण का कहना है कि @ ऑवरराइड की जरूरत नहीं है और सुपर सेट नहीं किया जा सकता है। यह प्रणाली द्वारा कभी नहीं कहा जाता है, और यहां तक ​​कि अगर यह था कि मैं यह कैसे निर्धारित करूंगा कि इस समय कौन सा पृष्ठ दिखाया जा रहा है? क्या मुझे यहाँ कुछ मदद मिल सकती है?


1
इस एक ने मेरे लिए काम किया, और दिए गए समाधान का उपयोग करने के बारे में थोड़ा और संदर्भ देता है: Fragment के अंदर ViewPager टैब परिवर्तन का पता लगाएं
gcl1

जवाबों:


285

का प्रयोग करें ViewPager.onPageChangeListener:

viewPager.addOnPageChangeListener(new OnPageChangeListener() {
    public void onPageScrollStateChanged(int state) {}
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {}

    public void onPageSelected(int position) {
        // Check if this is the page you want.
    }
});

48
आप इसके बजाय एक SimpleOnPageChangeListener का उपयोग कर सकते हैं और केवल ओवरराइड को ओवरराइड कर सकते हैं
चयनित

118

ViewPager.setOnPageChangeListenerअब पदावनत कर दिया गया है। अब आपको ViewPager.addOnPageChangeListenerइसके बजाय उपयोग करने की आवश्यकता है ।

उदाहरण के लिए,

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

        }

        @Override
        public void onPageSelected(int position) {

        }

        @Override
        public void onPageScrollStateChanged(int state) {

        }
    });

3
मुझे समझ में नहीं आ रहा है। एक पूर्ण शुरुआत है। तो हम उन तरीकों के अंदर क्या डालते हैं। सीखने के लिए कृपया मेरी मदद करें addOnPageChangeListener
कार्यू बेन्सन कार्यू

जानकारी के लिए +1, लेकिन इन दोनों में क्या अंतर है ViewPager.SimpleOnPageChangeListenerऔर ViewPager.OnPageChangeListenerजैसा कि ऊपर उल्लेख किया गया है?
RoCk RoCk

2
SimpleRPageChangeListener के साथ @RoCk आपको केवल उन तरीकों को ओवरराइड करने की आवश्यकता है जिन्हें आप वास्तव में उपयोग करना चाहते हैं। उदाहरण के लिए stackoverflow.com/a/31961397/608312 देखें ।
जेक ली

37

आप ViewPager.SimpleOnPageChangeListenerइसके बजाय का उपयोग कर सकते हैं ViewPager.OnPageChangeListenerऔर केवल उन तरीकों को ओवरराइड कर सकते हैं जिन्हें आप उपयोग करना चाहते हैं।

viewPager.addOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {

    // optional 
    @Override
    public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { }

    // optional 
    @Override
    public void onPageSelected(int position) { }

    // optional 
    @Override
    public void onPageScrollStateChanged(int state) { }
});

उममीद है कि इससे मदद मिलेगी :)

संपादित करें: Android एपीआई के अनुसार, setOnPageChangeListener (ViewPager.OnPageChangeListener listener)पदावनत किया जाता है। कृपया इस url की जाँच करें: - Android ViewPager API


1
जैसा कि mViewPager.setOnPageChangeListener();अभी निकाला गया है, यह ठीक काम कर रहा है।
बीएसटी काल

उपरोक्त कोड में, यह पता लगाने के लिए कि क्या राज्य ने वर्तमान स्थिति को बदल दिया है और जब पृष्ठ onPageScrolled पद्धति में स्क्रॉल किया जाता है, तो उसकी तुलना करें।
अनुपमचुघ

14

Kotlin उपयोगकर्ता ,

viewPager.addOnPageChangeListener(object : ViewPager.OnPageChangeListener {

            override fun onPageScrollStateChanged(state: Int) {
            }

            override fun onPageScrolled(position: Int, positionOffset: Float, positionOffsetPixels: Int) {

            }

            override fun onPageSelected(position: Int) {
            }
        })

ViewPager2 के लिए अद्यतन 2020

        viewPager.registerOnPageChangeCallback(object : ViewPager2.OnPageChangeCallback() {
        override fun onPageScrollStateChanged(state: Int) {
            println(state)
        }

        override fun onPageScrolled(
            position: Int,
            positionOffset: Float,
            positionOffsetPixels: Int
        ) {
            super.onPageScrolled(position, positionOffset, positionOffsetPixels)
            println(position)
        }


        override fun onPageSelected(position: Int) {
            super.onPageSelected(position)
            println(position)
        }
    })

11

ViewPager2 के लिए,

viewPager.registerOnPageChangeCallback(object : ViewPager2.OnPageChangeCallback() {
  override fun onPageSelected(position: Int) {
    super.onPageSelected(position)
  }
})

OnPageChangeCallbackतीन तरीकों के साथ एक स्थिर वर्ग कहां है:

onPageScrolled(int position, float positionOffset, @Px int positionOffsetPixels),
onPageSelected(int position), 
onPageScrollStateChanged(@ScrollState int state)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.