ViewPager में प्रोग्रामेटिकली अगला दृश्य कैसे दिखाया जाए?


107

मैंने एक ViewPager बनाया और सब कुछ ठीक काम कर रहा है, हालाँकि मैं ViewPager के बाहर एक पिछला अगला बटन रखना चाहता हूं जिसका उपयोग ViewPager के अंदर नेविगेट करने के लिए किया जा सकता है। मैं मैन्युअल रूप से स्वाइप किए बिना ViewPager पर अगले आइटम पर कैसे जा सकता हूं?


39
क्या यह कार्य viewpager.setCurrentItem (int index) नहीं करता है; ?
आलीशान

यह किया, मुझे लगता है कि यह सवाल एक नकल है।
वैभव मिश्रा

जवाबों:


154

जैसा कि आशीर्वाद ने कहा viewpager.setCurrentItem(int index)कि जाने का रास्ता है।


5
दुर्भाग्य से मुझे अलग व्यवहार मिलता है, जब उपयोगकर्ता मैन्युअल रूप से स्वाइप करता है और जब मैं setCurrentItem का उपयोग करके कूदता हूं। कॉल का क्रम उलट है। जब मैं स्वाइप करता हूं, तो यह पहले OnPageChangeListener # onPageSelected को कॉल करता है और फिर इसे अंशों में setUserVanishHint कहता है। यदि मैं setCurrentItem का उपयोग करता हूं, तो यह पहली बार अंशों में setUserVanishHint को कॉल करता है और फिर इसे OnPageChangeListener # onPageSelected कहता है, जो वास्तव में मेरे मामले में एक समस्या है: / इसलिए मैं प्राकृतिक व्यवहार रखने का एक तरीका खोजने की उम्मीद कर रहा हूं, लेकिन फिर भी प्रोग्रामेटिक रूप से दूसरे पृष्ठ पर जाना होगा। ।
AgentKnopf

@ वैभव क्या होगा अगर मैं गतिविधि का अगला दृश्य दिखाना चाहता हूं
प्रोंस

@AgentKnopf क्या आपने इस समस्या का समाधान खोजने का प्रबंधन किया है? मैं इस अजीब व्यवहार को भी देखता हूं, लेकिन जब मैं प्रोग्राम को अगले / खंडित करने के लिए स्विच करता हूं, तो नियमित रूप से स्वाइप के प्रवाह को बनाए रखने का कोई तरीका नहीं मिल सकता है।
गिल

@ मुझे डर नहीं है - मैंने वर्तमान दृश्य के प्रोग्रामेटिक परिवर्तन को हटा दिया और बस स्वाइप करने की अनुमति दी। हालाँकि हमने बाद में कार्यान्वयन को पूरी तरह से बदल दिया इसलिए मैंने इस मुद्दे को आगे नहीं बढ़ाया।
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)यह जानने के लिए उपयोग कर सकते हैं कि इसका क्या कारण है
टॉमस वुल्फ

2
@ सागर उसने बटन के क्लिक श्रोता को xml में सेट किया होगा, उस स्थिति में आपके पास दृश्य पैरामीटर होना चाहिए, भले ही आपको इसकी आवश्यकता हो।
आशीष तन्ना

पृष्ठ स्वाइप करना एनीमेशन नहीं आ रहा है?
लवकुश अग्रवाल

18

सबसे आसान तरीका है:

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

ध्यान दें कि यह साथ काम नहीं कर रहा है ViewPager2
मीकर

0

मैं इसे बेहतर ढंग से तय करता हूं, एंड्रॉइडर्स पर जाएं।

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