2015-10-25 8 views
8

RecyclerView.scrollToPosition() बेहद अजीब है। उदाहरण के लिए , RecyclerView नाम "rv" रखा गया था।वर्तमान दृश्य के शीर्ष पर स्थिति को स्थानांतरित करने के लिए RecyclerView.scrollToPosition() का उपयोग कैसे करें?

  1. अगर अब आइटम 10 वर्तमान RecyclerView किया जा रहा है, फोन rv.scrollToPosition(10), RecyclerView नीचे करने के लिए आइटम 10 स्क्रॉल करेगा।

  2. यदि अब आइटम 10 वर्तमान RecyclerView में है, तो rv.scrollToPosition(10) पर कॉल करें, कोई स्क्रॉलिंग नहीं होगी, कुछ भी नहीं किया जाएगा।

  3. अगर अब आइटम 10 वर्तमान RecyclerView के शीर्ष पर है, फोन rv.scrollToPosition(10), RecyclerView शीर्ष पर आइटम 10 स्क्रॉल करेगा।

समझने में मदद करने के लिए, इस picture को देखो।

लेकिन मुझे जो चाहिए वह यह है कि, जब भी मैं इसे कॉल करता हूं, RecyclerView अनुमानित स्थिति को वर्तमान दृश्य के शीर्ष पर केवल 3 की तरह स्क्रॉल करेगा। यह कैसे करें?

+1

http://stackoverflow.com/questions/26875061/scroll-recyclerview-to-show-selected-item-on-top – USKMobility

+0

बिल्कुल मैं क्या चाहता हूँ! आपका बहोत धन्य्वाद! ummm ... मुझे लगता है कि मुझे अपना प्रश्न हटाना चाहिए ... – cryyyyy

+0

रैखिक LayoutManager.scrollToPositionWithOffset (2, 20) का उपयोग करें; देखें [शीर्ष पर चयनित आइटम दिखाने के लिए स्क्रॉल रीसाइक्लर व्यू] (http://stackoverflow.com/questions/26875061/scroll-recyclerview-to-show-selected-item-on-top) –

उत्तर

21

यदि मैं प्रश्न समझता हूं, तो आप किसी विशिष्ट स्थिति पर स्क्रॉल करना चाहते हैं लेकिन वह स्थिति एडाप्टर की स्थिति है और RecyclerView की आइटम स्थिति नहीं है।

आप इसे केवल LayoutManager के माध्यम से प्राप्त कर सकते हैं।

की तरह कुछ है:

rv.getLayoutManager().scrollToPosition(youPositionInTheAdapter). 
+0

मैं एडाप्टरपोजिशन को इस पर कैसे पास करूं तरीका? – Bot

+1

मुझे यकीन है कि यह गलत है। RecyclerView पर कॉलिंग scrollToPosition केवल लेआउटमैनेजर पर एक ही विधि को कॉल करता है। यह javadocs में भी कहता है "RecyclerView स्क्रॉलिंग तर्क को लागू नहीं करता है, बल्कि एंड्रॉइड.support.v7.widget.RecyclerView.LayoutManager # scrollToPosition कॉलिंग स्क्रॉल रीसाइक्लिंग व्यू या लेआउटमैनेजर पर सटीक समान प्रभाव होगा। –

1

लिंक नीचे अपनी समस्या को हल कर सकता है:

https://stackoverflow.com/a/43505830/4849554

बस वरीयता STAP_TO_START के साथ एक SmoothScroller बनाएँ:

RecyclerView.SmoothScroller smoothScroller = new 
LinearSmoothScroller(context) { 
    @Override protected int getVerticalSnapPreference() { 
     return LinearSmoothScroller.SNAP_TO_START; 
    } 
}; 

अब आप सेट वह स्थिति जहां आप स्क्रॉल करना चाहते हैं:

smoothScroller.setTargetPosition(position); 

और LayoutManager है कि SmoothScroller पारित: ऐसा इसलिए है

layoutManager.startSmoothScroll(smoothScroller); 
+0

यह ठीक है अगर आप एक चिकनी स्क्रॉल करना चाहते हैं, लेकिन यदि आप एक स्वचालित स्क्रॉल करना चाहते हैं तो क्या होगा? – 4gus71n

+0

यदि आप कुछ स्थिति में स्वचालित रूप से स्क्रॉल करना चाहते हैं, तो उस स्थिति में यह कोड सही काम करेगा। यह चिकनी संक्रमण के साथ कुछ स्थिति में स्वत: स्क्रॉल करेगा ... मुझे आशा है कि मुझे आपका प्रश्न सही मिलेगा। – Ritesh

+2

बात यह है कि मेरे RecyclerView में 700 आइटम हैं, इसलिए यदि लक्ष्य स्क्रॉल की दूरी <30 है, तो मैं चिकनी स्क्रॉल का उपयोग करता हूं, और यह कोड पूरी तरह से काम करता है। लेकिन यदि लक्ष्य स्क्रॉल की दूरी है> 30 मैं स्वचालित रूप से उस आइटम पर कूदना चाहता हूं। उस मामले में मैं चिकनी स्क्रॉल का उपयोग नहीं करना चाहता। मैं उस आइटम को "शुरू करने के लिए कैसे स्नैप कर सकता हूं"? – 4gus71n

संबंधित मुद्दे

 संबंधित मुद्दे