Android RecyclerView स्क्रॉलिंग प्रदर्शन


86

मैंने RecyclerView का उदाहरण क्रिएट लिस्ट और कार्ड गाइड बनाया है। मेरे एडॉप्टर में केवल लेआउट को बढ़ाने के लिए एक पैटर्न कार्यान्वयन है।

समस्या खराब स्क्रॉलिंग प्रदर्शन है। यह केवल 8 आइटम के साथ एक रीसायकल व्यू में है।

कुछ परीक्षणों में मैंने सत्यापित किया कि Android L में यह समस्या नहीं होती है। लेकिन किटकैट संस्करण में प्रदर्शन की कमी स्पष्ट है।


1
स्क्रॉलिंग प्रदर्शन के लिए ViewHolder डिज़ाइन पैटर्न का उपयोग करने का प्रयास करें: developer.android.com/training/improving-layouts/…
हरेश छलाना

@HareshChhelana आप जवाब के लिए धन्यवाद! लेकिन मैं पहले से ही ViewHolder पैटर्न का उपयोग कर रहा हूँ, लिंक के अनुसार: developer.android.com/training/material/lists-cards.html
falvojr

2
क्या आप अपने लेआउट के लिए अपने एडेप्टर सेटअप और XML फ़ाइल के बारे में कुछ कोड साझा कर सकते हैं। यह सामान्य नहीं लगता है। इसके अलावा, क्या आपने प्रोफ़ाइल किया और देखा कि समय कहाँ बिताया जाता है?
यिगित

2
मैं सभी समस्याओं का सामना कर रहा हूँ। एंड्रॉइड एल में प्री लॉलीपॉप और अविश्वसनीय (वास्तव में) धीमी गति से अपने को छोड़कर
सर्विसस 7

1
क्या आप उस लाइब्रेरी का संस्करण भी साझा कर सकते हैं जिसे आप आयात कर रहे हैं।
Droidekas

जवाबों:


227

मैंने हाल ही में एक ही मुद्दे का सामना किया है, इसलिए मैंने नवीनतम RecyclerView समर्थन पुस्तकालय के साथ ऐसा किया है:

  1. एक जटिल लेआउट (नेस्टेड विचार, RelativeLayout) को नए अनुकूलित कॉन्ट्राटाइनलआउट के साथ बदलें । इसे Android Studio में सक्रिय करें: SDK Manager -> SDK Tools tab -> Support Repository -> Android के लिए ConstraintLayout और ConstraintLayout के लिए सॉल्वर चेक करें। निर्भरता में जोड़ें:

    compile 'com.android.support.constraint:constraint-layout:1.0.2'
    
  2. यदि संभव हो, तो RecyclerView के सभी तत्वों को समान ऊंचाई के साथ बनाएं । और जोड़:

    recyclerView.setHasFixedSize(true);
    
  3. डिफ़ॉल्ट RecyclerView ड्राइंग कैश विधियों का उपयोग करें और उन्हें अपने मामले के अनुसार ट्विक करें। ऐसा करने के लिए आपको तीसरे पक्ष के पुस्तकालय की आवश्यकता नहीं है:

    recyclerView.setItemViewCacheSize(20);
    recyclerView.setDrawingCacheEnabled(true);
    recyclerView.setDrawingCacheQuality(View.DRAWING_CACHE_QUALITY_HIGH);
    
  4. यदि आप कई छवियों का उपयोग करते हैं , तो सुनिश्चित करें कि उनका आकार और संपीड़न इष्टतम हैं । स्केलिंग छवियां प्रदर्शन को प्रभावित कर सकती हैं। समस्या के दो पक्ष हैं - स्रोत छवि का उपयोग किया गया और डिकोड्ड बिटमैप। निम्न उदाहरण आपको एक संकेत देता है कि वेब से डाउनलोड की गई छवि को कैसे डिकोड किया जाए:

    InputStream is = (InputStream) url.getContent();
    BitmapFactory.Options options = new BitmapFactory.Options();
    options.inPreferredConfig = Bitmap.Config.RGB_565;
    Bitmap image = BitmapFactory.decodeStream(is, null, options);
    

सबसे महत्वपूर्ण हिस्सा निर्दिष्ट कर रहा है inPreferredConfig- यह परिभाषित करता है कि छवि के प्रत्येक पिक्सेल के लिए कितने बाइट्स का उपयोग किया जाएगा। ध्यान रखें कि यह एक पसंदीदा विकल्प है। यदि स्रोत छवि में अधिक रंग हैं, तो यह अभी भी एक अलग कॉन्फ़िगरेशन के साथ डिकोड किया जाएगा।

  1. सुनिश्चित करें कि onBindViewHolder () जितना संभव हो उतना सस्ता है। आप OnClickListener को एक बार सेट कर सकते हैं onCreateViewHolder()और क्लिक किए गए आइटम को पास करते हुए एडॉप्टर के बाहर एक श्रोता के माध्यम से कॉल कर सकते हैं । इस तरह आप हर समय अतिरिक्त ऑब्जेक्ट नहीं बनाते हैं। यहां दृश्य में कोई भी बदलाव करने से पहले, झंडे और राज्यों की जांच करें।

    viewHolder.itemView.setOnClickListener(new View.OnClickListener() {
          @Override
          public void onClick(View view) {
              Item item = getItem(getAdapterPosition());
              outsideClickListener.onItemClicked(item);
          }
    });
    
  2. जब डेटा बदल जाता है, तो केवल प्रभावित वस्तुओं को अपडेट करने का प्रयास करें । उदाहरण के लिए notifyDataSetChanged(), अधिक आइटम जोड़ने / लोड करने के दौरान पूरे डेटा को अमान्य करने के बजाय , बस उपयोग करें:

    adapter.notifyItemRangeInserted(rangeStart, rangeEnd);
    adapter.notifyItemRemoved(position);
    adapter.notifyItemChanged(position);
    adapter.notifyItemInserted(position);
    
  3. से Android डेवलपर वेब साइट :

एक अंतिम उपाय के रूप में नोटिफ़ाइड डेटासेट () पर भरोसा करें।

लेकिन अगर आपको इसका उपयोग करने की आवश्यकता है, तो अद्वितीय आईडी के साथ अपनी वस्तुओं को बनाए रखें :

    adapter.setHasStableIds(true);

RecyclerView एडेप्टर के लिए दृश्यमान संरचनात्मक परिवर्तन घटनाओं को संश्लेषित करने का प्रयास करेगा जो रिपोर्ट करते हैं कि उनके पास स्थिर आईडी है जब इस पद्धति का उपयोग किया जाता है। यह एनीमेशन और विज़ुअल ऑब्जेक्ट दृढ़ता के उद्देश्यों के लिए मदद कर सकता है, लेकिन व्यक्तिगत आइटम दृश्यों को अभी भी पलटाव और फिर से बाहर करना होगा।

यहां तक ​​कि अगर आप सब कुछ ठीक करते हैं, तो संभावना है कि RecyclerView अभी भी उतना सुचारू रूप से प्रदर्शन नहीं कर रहा है जितना आप चाहते हैं।


18
एडेप्टर के लिए एक वोट ।setHasStableIds (सच); विधि है कि वास्तव में तेजी से recyclerview बनाने में मदद की।
अतुला

1
भाग 7 पूरी तरह से गलत है! setHasStableIds (सही) आप अनुकूलक का उपयोग करने के अलावा कुछ भी नहीं करेंगे। लिंक: developer.android.com/reference/android/support/v7/widget/…
लोकलहोस्टेस

1
मैं देख recyclerView.setItemViewCacheSize(20);सकता हूं कि प्रदर्शन को क्यों प्रभावित कर सकता है। लेकिन recyclerView.setDrawingCacheEnabled(true);और recyclerView.setDrawingCacheQuality(View.DRAWING_CACHE_QUALITY_HIGH);हालांकि! मुझे यकीन नहीं है कि ये कुछ भी बदल देंगे। ये Viewविशिष्ट कॉल हैं जो आपको ड्राइंग कैश को बिटमैप के रूप में प्रोग्राम करने की अनुमति देते हैं और बाद में इसे अपने लाभ के लिए उपयोग करते हैं। RecyclerViewइसके बारे में कुछ भी करने के लिए प्रतीत नहीं होता है।
अब्देलहाकिम AKODADI

1
@AbdelhakimAkodadi, स्क्रॉलिंग कैश के साथ चिकनी हो जाती है। मैंने इसका परीक्षण किया है। आप अन्यथा कैसे कह सकते हैं, यह स्पष्ट है। बेशक, अगर कोई पागल की तरह स्क्रॉल करता है तो कुछ भी मदद नहीं करेगा। मैं बस अन्य विकल्पों को दिखाता हूं जैसे कि setDrawingCacheQuality, जिसका मैं उपयोग नहीं करता, क्योंकि मेरे मामले में छवि गुणवत्ता महत्वपूर्ण है। मैं DRAWING_CACHE_QUALIh TY_HIGH का प्रचार नहीं करता, लेकिन सुझाव है कि जो भी गहरी दिलचस्पी लेता है और विकल्प को मोड़ता है।
Galya

2
setDrawingCacheEnabled () और setDrawingCacheQuality () को दर्शाया गया है। इसके बजाय हार्डवेयर त्वरण का उपयोग करें। डेवलपर
.android.com

14

मैंने निम्नलिखित झंडे को जोड़कर इस समस्या को हल किया:

https://developer.android.com/reference/android/support/v7/widget/RecyclerView.Adapter.html#setHasStableIds(boolean)


2
यह मेरे लिए एक मामूली प्रदर्शन में सुधार करता है। लेकिन RecyclerView अभी भी मृत-कुत्ता धीमा है - एक समान कस्टम लिस्ट व्यू की तुलना में बहुत धीमा।
SMBiggs

आह, लेकिन मुझे पता चला कि मेरा कोड इतना धीमा क्यों है - इसका setHasStableIds () से कोई लेना-देना नहीं है। मैं अधिक जानकारी के साथ उत्तर पोस्ट करूंगा।
SMBiggs

13

मैंने कम से कम एक पैटर्न खोजा जो आपके प्रदर्शन को मार सकता है। याद रखें onBindViewHolder()जिसे अक्सर कहा जाता है । तो उस कोड में आप जो कुछ भी करते हैं उसमें आपके प्रदर्शन को रोकने की क्षमता है। यदि आपका RecyclerView कोई अनुकूलन करता है, तो गलती से इस पद्धति में कुछ धीमा कोड डालना बहुत आसान है।

मैं स्थिति के आधार पर प्रत्येक RecyclerView की पृष्ठभूमि छवियों को बदल रहा था। लेकिन छवियों को लोड करने में थोड़ा काम लगता है, जिससे मेरा RecyclerView सुस्त और झटकेदार हो जाता है।

छवियों के लिए एक कैश बनाना अद्भुत काम किया; onBindViewHolder()अब यह खरोंच से लोड करने के बजाय एक कैश्ड छवि के संदर्भ को संशोधित करता है। अब RecyclerView साथ जाता है।

मुझे पता है कि सभी को यह सटीक समस्या नहीं होगी, इसलिए मैं कोड लोड करने के लिए परेशान नहीं हूं। लेकिन onBindViewHolder()खराब RecyclerView प्रदर्शन के लिए संभावित बॉटल-नेक के रूप में आपके द्वारा किए गए किसी भी काम पर विचार करें ।


मुझे भी यही तकलीफ़ है। अभी मैं इमेज लोडिंग और कैशिंग के लिए फ्रेस्को का उपयोग कर रहा हूं। क्या आपके पास RecyclerView के भीतर छवियों को लोड करने और कैश करने के लिए एक और बेहतर समाधान है। धन्यवाद।
Androidicus

मैं फ्रेस्को (पढ़ने ... उनके वादे अच्छे हैं) से अपरिचित हूं। हो सकता है कि उनके पास RecyclerViews के साथ अपने कैश का सबसे अच्छा उपयोग करने के बारे में कुछ अंतर्दृष्टि हो। : और मैं आप इस समस्या से केवल एक ही नहीं कर रहे हैं देखने के github.com/facebook/fresco/issues/414
SMBiggs

10

@ गल्या के विस्तृत उत्तर के अलावा, मैं यह बताना चाहता हूं कि भले ही यह एक अनुकूलन मुद्दा हो, लेकिन यह भी सच है कि डिबगर सक्षम होने से चीजें बहुत धीमी हो सकती हैं।

यदि आप अपना अनुकूलन करने के लिए सब कुछ करते हैं RecyclerViewऔर यह अभी भी सुचारू रूप से काम नहीं करता है, तो अपने बिल्ड वेरिएंट को स्विच करने का प्रयास करें release, और जांचें कि यह गैर-विकास वाले वातावरण में कैसे काम करता है (डिबगर अक्षम के साथ)।

मेरे साथ ऐसा हुआ कि मेरा ऐप धीरे-धीरे debugवेरिएंट बनाने में प्रदर्शन कर रहा था , लेकिन जैसे ही मैंने releaseवेरिएंट में स्विच किया, यह आसानी से काम कर रहा था। इसका मतलब यह नहीं है कि आपको releaseबिल्ड वेरिएंट के साथ विकसित करना चाहिए , लेकिन यह जानना अच्छा है कि जब भी आप अपने ऐप को शिप करने के लिए तैयार होते हैं, तो यह ठीक काम करेगा।


यह टिप्पणी वास्तव में मेरे लिए उपयोगी थी! मैंने अपने रिसाइक्लेरव्यू के प्रदर्शन को बेहतर बनाने के लिए सब कुछ करने की कोशिश की है, लेकिन वास्तव में कुछ भी मदद नहीं की है, लेकिन एक बार जब मैंने रिलीज़ बिल्ड पर स्विच किया तो मुझे एहसास हुआ कि सब कुछ ठीक है।
ताल बरदा

1
मैंने डिबगर के बिना भी एक ही मुद्दे का सामना किया, लेकिन जैसे ही बिल्ड रिलीज करने के लिए स्थानांतरित किया गया, इस मुद्दे को अब नहीं देखा गया था
फरमान इलाही

8

मैं एक RecyclerViewप्रदर्शन के बारे में बात की थी । यहां अंग्रेजी में स्लाइड और रूसी में रिकॉर्ड किए गए वीडियो हैं

इसमें तकनीकों का एक सेट शामिल है (उनमें से कुछ पहले से ही @ दरिया के उत्तर द्वारा कवर किए गए हैं )।

यहाँ एक संक्षिप्त सारांश है:

  • यदि Adapterआइटम का आकार निश्चित है तो सेट करें:
    recyclerView.setHasFixedSize(true);

  • यदि डेटा संस्थाओं को लंबे समय तक ( hashCode()उदाहरण के लिए) द्वारा दर्शाया जा सकता है, तो सेट करें:
    adapter.hasStableIds(true);
    और कार्यान्वित करें:
    // YourAdapter.java
    @Override
    public long getItemId(int position) {
    return items.get(position).hashcode(); //id()
    }
    इस मामले में Item.id()काम नहीं करेगा, क्योंकि यह उसी तरह रहेगा, भले ही Itemसामग्री बदल गई हो।
    PS यदि आप डिफ्यूटिल का उपयोग कर रहे हैं तो यह आवश्यक नहीं है!

  • सही तरीके से स्केल्ड बिटमैप का उपयोग करें। पहिया को सुदृढ़ न करें और पुस्तकालयों का उपयोग करें।
    अधिक जानकारी यहाँ कैसे चुनें ।

  • हमेशा के नवीनतम संस्करण का उपयोग करें RecyclerView। उदाहरण के लिए, इसमें पहले से बेहतर प्रदर्शन सुधार थे 25.1.0
    अधिक जानकारी यहाँ

  • डिफ्यूटल का उपयोग करें।
    डिफ्यूटिल एक जरूरी है
    आधिकारिक दस्तावेज

  • अपने आइटम के लेआउट को सरल बनाएं!
    TextViews को समृद्ध करने के लिए छोटे पुस्तकालय - TextViewRichDrawable

अधिक विस्तृत विवरण के लिए स्लाइड देखें ।


7

मुझे वास्तव में यकीन नहीं है कि अगर setHasStableIdध्वज का उपयोग आपकी समस्या को ठीक करने वाला है। आपके द्वारा प्रदान की जाने वाली जानकारी के आधार पर आप अपने प्रदर्शन के मुद्दे को किसी स्मृति समस्या से संबंधित हो सकते हैं। उपयोगकर्ता इंटरफ़ेस और मेमोरी के संदर्भ में आपका एप्लिकेशन प्रदर्शन काफी संबंधित है।

पिछले हफ्ते मुझे पता चला कि मेरा ऐप मेमोरी लीक कर रहा था। मुझे यह पता चला क्योंकि अपने ऐप का उपयोग करने के 20 मिनट बाद मैंने देखा कि UI वास्तव में धीमी गति से प्रदर्शन कर रहा था। किसी गतिविधि को बंद करना / खोलना या तत्वों के एक समूह के साथ एक RecyclerView को स्क्रॉल करना वास्तव में धीमा था। Http://flowup.io/ के उपयोग से उत्पादन में अपने कुछ उपयोगकर्ताओं की निगरानी के बाद मैंने यह पाया:

यहां छवि विवरण दर्ज करें

फ्रेम समय वास्तव में बहुत अधिक था और फ्रेम प्रति सेकंड वास्तव में बहुत कम था। आप देख सकते हैं कि रेंडर करने के लिए 2 सेकंड के बारे में कुछ फ्रेम की जरूरत है: एस।

यह पता लगाने की कोशिश कर रहा है कि इस खराब फ्रेम समय के कारण क्या था / एफपीएस मुझे पता चला कि मेरे पास एक मेमोरी मुद्दा था जैसा कि आप यहां देख सकते हैं:

यहां छवि विवरण दर्ज करें

यहां तक ​​कि जब एक ही समय में औसत मेमोरी खपत 15 एमबी के करीब थी, तो ऐप फ्रेम को छोड़ रहा था।

यही कारण है कि मैंने यूआई मुद्दे की खोज की है। मेरे ऐप में मेमोरी लीक होने के कारण बहुत सारे कचरा संग्रहकर्ता घटनाएँ हो रही हैं और इससे यूआई का प्रदर्शन खराब हो रहा है क्योंकि एंड्रॉइड वीएम को हर एक फ्रेम में मेमोरी इकट्ठा करने के लिए मेरे ऐप को बंद करना पड़ा।

कोड को देखते हुए मेरे पास एक कस्टम दृश्य के अंदर एक रिसाव था क्योंकि मैं एंड्रॉइड कोरियोग्राफर उदाहरण से एक श्रोता को अपंजीकृत नहीं कर रहा था। फिक्स जारी करने के बाद, सब कुछ सामान्य हो गया :)

यदि आपका ऐप एक मेमोरी इश्यू के कारण फ़्रेम को छोड़ रहा है, तो आपको दो सामान्य त्रुटियों की समीक्षा करनी चाहिए:

समीक्षा करें कि क्या आपका ऐप एक विधि के अंदर वस्तुओं को प्रति सेकंड कई बार आह्वान कर आवंटित कर रहा है। भले ही यह आवंटन किसी अन्य स्थान पर किया जा सकता है जहां आपका आवेदन धीमा हो रहा है। एक उदाहरण आपके पुनर्नवीनीकरण दृश्य दृश्य धारक में onBindViewHolder पर onDraw कस्टम दृश्य विधि के अंदर किसी ऑब्जेक्ट के नए उदाहरण बना सकता है। समीक्षा करें कि क्या आपका ऐप Android SDK में एक उदाहरण दर्ज कर रहा है, लेकिन इसे जारी नहीं कर रहा है। एक श्रोता को बस कार्यक्रम में पंजीकृत करना भी संभव रिसाव हो सकता है।

डिस्क्लेमर: मेरे ऐप को मॉनिटर करने के लिए मैं जिस टूल का इस्तेमाल कर रहा हूं, वह डेवलपमेंट के तहत है। इस उपकरण तक मेरी पहुंच है क्योंकि मैं डेवलपर्स में से एक हूं :) यदि आप इस उपकरण तक पहुंच चाहते हैं तो हम जल्द ही एक बीटा संस्करण जारी करेंगे! आप हमारी वेब साइट में शामिल हो सकते हैं: http://flowup.io/

यदि आप विभिन्न उपकरणों का उपयोग करना चाहते हैं, तो आप उपयोग कर सकते हैं: यात्रा-वृत्तांत, dmtracedump, systrace या Andorid प्रदर्शन मॉनिटर Android स्टूडियो में एकीकृत। लेकिन याद रखें कि यह उपकरण आपके कनेक्ट किए गए डिवाइस की निगरानी करेगा न कि आपके अन्य उपयोगकर्ता उपकरणों या Android OS इंस्टॉलेशन के।


3

यह भी महत्वपूर्ण है कि आप अपने Recyclerview में डाल माता पिता के लेआउट की जाँच करें। मेरे पास एक समान स्क्रॉलिंग समस्याएँ थीं जब मैं एक नेस्ट्रोक्रोलव्यू में recyclerView का परीक्षण कर रहा था। ऐसा दृश्य जो स्क्रॉल में किसी अन्य दृश्य में स्क्रॉल करता है, स्क्रॉलिंग के दौरान प्रदर्शन में पीड़ित हो सकता है


हाँ मान्य बिंदु। मुझे भी इसी मुद्दे का सामना करना पड़ता है!
रंजीत कुमार

2

मेरे मामले में, मुझे पता चला कि लैग का उल्लेखनीय कारण अक्सर #onBindViewHolder()विधि के अंदर खींचने योग्य लोडिंग है । मैंने इसे ViewHolder के अंदर एक बार Bitmap के रूप में छवियों को लोड करके हल किया और इसे उल्लिखित विधि से एक्सेस किया। यही सब मैंने किया है।


2

मेरे पुनर्नवीनीकरण दृश्य में, मैं अपने item_layout की पृष्ठभूमि के लिए Bitmap Images का उपयोग करता हूं।
सब कुछ @ गालिया ने कहा सच है (और मैं उनके शानदार जवाब के लिए धन्यवाद)। लेकिन उन्होंने मेरे लिए काम नहीं किया।

यह मेरी समस्या का हल है:

BitmapFactory.Options options = new BitmapFactory.Options();
options.inSampleSize = 2;
Bitmap bitmap = BitmapFactory.decodeStream(stream, null, options);

अधिक जानकारी के लिए कृपया इस उत्तर को पढ़ें ।


2

Mycase में मेरे पास जटिल recyclerview childs हैं। तो इससे गतिविधि लोडिंग समय प्रभावित हुआ (गतिविधि प्रतिपादन के लिए ~ 5 सेकंड)

मैं एडेप्टर को पोस्टडेलिड () -> के साथ लोड करता हूं, इससे एक्टिविटी रेंडरिंग के लिए अच्छा रिजल्ट मिलेगा। गतिविधि के बाद चिकनी के साथ मेरे रिसाइकलव्यू लोड का प्रतिपादन।

इस उत्तर की कोशिश करो,

    recyclerView.postDelayed(new Runnable() {
        @Override
        public void run() {
            recyclerView.setAdapter(mAdapter);
        }
    },100); 

1

मैं उन टिप्पणियों में देखता हूं जो आप पहले से ही ViewHolderपैटर्न को लागू कर रहे हैं , लेकिन मैं यहां एक उदाहरण एडेप्टर पोस्ट करूंगा जो RecyclerView.ViewHolderपैटर्न का उपयोग करता है ताकि आप यह सत्यापित कर सकें कि आप इसे इसी तरह से एकीकृत कर रहे हैं, फिर से आपका कंस्ट्रक्टर आपकी आवश्यकताओं के आधार पर भिन्न हो सकता है, यहां एक उदाहरण है:

public class RecyclerAdapter extends RecyclerView.Adapter<RecyclerAdapter.ViewHolder> {

    Context mContext;
    List<String> mNames;

    public RecyclerAdapter(Context context, List<String> names) {
        mContext = context;
        mNames = names;
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
        View view = LayoutInflater.from(viewGroup.getContext())
                .inflate(android.R.layout.simple_list_item_1, viewGroup, false);

        return new ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(ViewHolder viewHolder, int position) {
        //Populate.
        if (mNames != null) {
            String name = mNames.get(position);

            viewHolder.name.setText(name);
        }
    }

    @Override
    public int getItemCount() {

        if (mNames != null)
            return mNames.size();
        else
            return 0;
    }

    /**
     * Static Class that holds the RecyclerView views. 
     */
    static class ViewHolder extends RecyclerView.ViewHolder {
        TextView name;

        public ViewHolder(View itemView) {
            super(itemView);
            name = (TextView) itemView.findViewById(android.R.id.text1);
        }
    }
}

यदि आपको RecyclerView.ViewHolderयह सुनिश्चित करने में कोई परेशानी हो रही है कि आपके पास उपयुक्त निर्भरताएँ हैं जिन्हें आप ग्रेडल प्लीज़ पर हमेशा सत्यापित कर सकते हैं

आशा है कि यह आपकी समस्या का समाधान करेगा।


1

इससे मुझे अधिक चिकनी स्क्रॉलिंग में मदद मिली:

एडेप्टर में onFailedToRecycleView (ViewHolder धारक) को ओवरराइड करें

और किसी भी चल रहे एनिमेशन (यदि कोई है) धारक को रोकें। "चेतन" ".clearAnimation ();

सच लौटना याद है;


1

मैंने इसे इस लाइन ऑफ़ कोड द्वारा हल किया

recyclerView.setNestedScrollingEnabled(false);

1

@ Galya के उत्तर को जोड़ते हुए, bind viewHolder में, मैं Html.fromHtml () विधि का उपयोग कर रहा था। जाहिर तौर पर इसका प्रदर्शन प्रभाव है।


0

मैं पिकासो पुस्तकालय के साथ केवल एक लाइन का उपयोग करके इस मुद्दे को हल करता हूं

फ़िट ()

Picasso.get().load(currentItem.getArtist_image())

                    .fit()//this wil auto get the size of image and reduce it 

                    .placeholder(R.drawable.ic_doctor)
                    .into(holder.img_uploaderProfile, new Callback() {
                        @Override
                        public void onSuccess() {


                        }

                        @Override
                        public void onError(Exception e) {
                            Toast.makeText(context, "Something Happend Wrong Uploader Image", Toast.LENGTH_LONG).show();
                        }
                    });
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.