मेरे UI में एक RecyclerView है जो TextViews में टेक्स्ट प्रविष्टियाँ दिखाता है। कार्यान्वयन वास्तव में जटिल नहीं है, व्यूहोल्डर टेक्स्ट व्यू को एक फ़ील्ड में संग्रहीत करता है, और onBindViewHolder बस उस पर TextView.setText को कॉल करता है।

private List<String> entries;

override fun onBindViewHolder(holder: TextHolder, position: Int) {
    holder.textView.text = entries[position];
}

जब प्रविष्टियाँ कम हों, तो कोई समस्या नहीं है। हालाँकि, जब कुछ या सभी प्रविष्टियाँ लंबी होती हैं (जैसे स्क्रीन की लंबाई का 2 या 3 गुना), तो यह बैक अप स्क्रॉल करते समय अचानक झटके का कारण बनता है, जो मुझे वास्तव में झकझोरने वाला लगता है। यह एक अंतराल की तरह प्रतीत नहीं होता है, RecyclerView बस आसानी से स्क्रॉल करता है, फिर तुरंत ऊपर की ओर कूदता है। यह तब होता है जब मैं फ़्लिक करता हूं और जब मैं धीरे-धीरे खींचता हूं।

क्या किसी को इसका कारण पता है, और क्या इसे ठीक करने का कोई तरीका है?

1
Leo Aso 15 अक्टूबर 2018, 00:23

1 उत्तर

सबसे बढ़िया उत्तर

यदि RecyclerView अडैप्टर में किसी तत्व का एक निश्चित दृश्य प्रकार है, तो RecyclerView यह भी मान लेगा कि उसकी एक समान ऊँचाई है। इससे स्क्रॉल करते समय RecyclerView अपनी ट्रैकिंग खो देगा।

एडेप्टर में getItemViewType को ओवरराइड करते समय मैंने अलग-अलग आकार के तत्वों को एक अलग ViewType असाइन करके इसके आसपास काम किया है। यह काम करेगा यदि आपके आइटम ऊंचाई में भिन्न हैं, लेकिन अन्यथा लगातार प्रदर्शित होते हैं।

एक और चीज जिसे आप आजमा सकते हैं, वह है एडॉप्टर की onBindViewHolder() विधि में चाइल्ड व्यू के LayoutParams को रीसेट करना। यह मूल लेआउट को रीफ्रेश करने और बच्चे की अद्यतन स्थिति के बारे में अधिसूचित होने का कारण बन सकता है।

1
John Leehey 16 अक्टूबर 2018, 17:49