2015-06-13 10 views
6

मैं अभी RecyclerView के साथ खेल रहा हूं और निम्न समस्या पर ठोकर खा रहा हूं। जब RecyclerView के LinearLayoutManager दृश्य को बंद कर दिया गया है या नहीं, तो यह निर्णय लेता है (इसलिए यह रीसाइक्लर हो सकता है) यह खाता दृश्य translationY में नहीं लेता है।रीसाइक्लिंग दृश्य दृश्यों का पुनर्चक्रण करते समय अनुवाद का सम्मान नहीं करता

तो अनिवार्य रूप से, जब मैं स्क्रॉल करता हूं और मेरे पास सकारात्मक translationY, LinearLayoutManager के साथ विचार हैं, तो लगता है कि दृश्य स्क्रीन बंद है, लेकिन वास्तव में, यह अभी भी दिखाई दे रहा है (क्योंकि इसका अनुवाद नीचे किया गया है)।

मैंने देखा है कि जिस तरह से LinearLayoutManager इस निर्णय करता है - getDecoratedBottom(View) को देखकर है, इसलिए मैं ओवरराइड करने के लिए getDecoratedBottom(View) भी अनुवाद में शामिल करने की कोशिश की। दुर्भाग्य से, यह पूरी तरह से लेआउट को खराब करता है - इस विधि को भी प्रयोग किया जाता है जब हम नए आइटम लेआउट, इसलिए नए आइटम अतिरिक्त अनुवाद (एक मौजूदा के शीर्ष पर) प्राप्त ..

वहाँ एक आसान तरीका LinearLayoutManager बताने के लिए translation को देखने के लिए है गुण जब रीसाइक्लिंग दृश्य के बारे में निर्णय लेता है w/o स्क्रैच से LayoutManager पुन: कार्यान्वित करता है?

+0

क्या आपको समस्या का समाधान मिला है? –

+0

@ZakharovRoman हाँ ... फोर्कड लीनियरआउटआउट प्रबंधक कार्यान्वयन और अनुवाद को शामिल करने के लिए इसके तर्क को थोड़ा सा संशोधित करता है। लेकिन 'बॉक्स से बाहर' कुछ भी वास्तव में इस मुद्दे को हल नहीं कर सकता था। –

+0

ठीक है, मैं कोशिश करूंगा। धन्यवाद –

उत्तर

0

यह किसी के लिए उपयोगी होगा, मुझे समाधान मिला है।

सबसे पहले मैंने अनुवाद एनीमेशन का उपयोग किसी किस्मत के साथ करने की कोशिश की। लेकिन फिर, मैंने अभी ItemDecoration का विस्तार करने वाली एक नई कक्षा बनाई है। फिर getItemOffsets() ओवरराइड और Rect पर उचित ऑफसेट सेट करें। लेआउटमैनेजर इस ऑफ़सेट को सफलतापूर्वक गणना करता है। प्राप्त परिणाम संलग्न छवि पर है।

+0

अच्छी तरह से, यह सुनिश्चित नहीं है कि यह मेरे मामले में काम करेगा क्योंकि प्रत्येक फ्रेम पर आईएम बदल रहा है। वास्तव में सजावट ऑफसेट को बदलने के प्रभावों को वास्तव में नहीं जानते हैं। –

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