5

रीसाइक्लिंग से एक दृश्य को रोकें मेरे पास एक सूची दृश्य है जिसका उपयोग पुनर्नवीनीकरण दृश्यों का उपयोग करता है। मैं रीसायकल से एक दृश्य को रोकने की कोशिश कर रहा हूँ। तो मैं setHasTransientState का उपयोग करें:सूची दृश्य:

android.support.v4.view.ViewCompatJB.setHasTransientState (देखें देखने के लिए, बूलियन hasTransientState)

यह जेलीबीन संस्करण पर बहुत अच्छी तरह से काम करता है, लेकिन यह कुछ भी नहीं है Api < 16. क्या इसे काम करने का कोई तरीका है या पूर्व जेलीबीन के लिए अलग दृष्टिकोण है?


मुझे पता चला एक RecyclerListener स्थापित करने के लिए कैसे की तरह @Daniel चाउ का सुझाव दिया।

listView.setRecyclerListener(new RecyclerListener() { 
     @Override 
     public void onMovedToScrapHeap(View view) { 
      // Stop animation on this view 
     } 
}); 
+2

आप क्यों चाहते हो जाएगा के बजाय रीसाइक्लिंग विचारों को रोकने के लिए? – Raghunandan

+0

मैं एक दृश्य को एनिमेट करना चाहता हूं। आप देख सकते हैं कि इसे यहां कैसे काम करना चाहिए http://graphics-geek.blogspot.it/2013/02/devbytes-listview-animations.html – vovahost

+0

क्या आपने समर्थन लाइब्रेरी फ़ंक्शन का उपयोग किया था: http://developer.android.com/ संदर्भ/एंड्रॉइड/समर्थन/v4/देखें/ViewCompat.html # setHasTransientState (android.view.View, बूलियन) –

उत्तर

4

पूर्व जेलीबीन के लिए, मुझे लगता है कि तुम सिर्फ ListView पर setRecyclerListener उपयोग कर सकते हैं और जब RecyclerListener # onMovedToScrapHeap (दृश्य देखें) कहा जाता है, दृश्य जो पुनर्नवीनीकरण किया गया है पर एनीमेशन स्पष्ट और सीधे अंतिम काम जो था एनीमेशन समाप्त होने पर किया जाना चाहिए।

MovedToScrapHeap (देखें व्यू) के अंदर कोड इस बात पर निर्भर करता है कि आप एनीमेशन को कैसे कार्यान्वित करते हैं, उदा। आप दृश्य # clearAnimation() को कॉल कर सकते हैं यदि आपने पहले देखा था # एनीमेशन शुरू करने के लिए एनीमेशन शुरू करें।

+0

क्या आप कुछ कोड लिख सकते हैं ** RecyclerListener # onMovedToScrapHeap (देखें व्यू) ** – vovahost

+1

@vovahost वहाँ हैं एंड्रॉइड में एनीमेशन शुरू करने के कुछ तरीके हैं, इसलिए रीसाइक्लिंग लिस्टनर # के अंदर कोड MovedToScrapHeap (व्यू व्यू) पर निर्भर करता है। यदि आप ViewPropertyAnimator का उपयोग करते हैं तो आप ViewPropertyAnimator # रद्द() को कॉल कर सकते हैं, यदि आप एनीमेशन शुरू करने के लिए View # startAnimation का उपयोग करते हैं तो आपको इसे रोकने के लिए View # clearAnimation() को कॉल करना चाहिए। रीसाइक्लिंग लिस्टनर # पर भेजा गया दृश्य MovedToScrapHeap (व्यू व्यू) वास्तव में एडाप्टर # getView() में कनवर्ट व्यू जैसा ही है, इसलिए आप बच्चे के दृश्य को ढूंढने और उसका उपयोग करने के लिए findViewById या ViewHolder का भी उपयोग कर सकते हैं। –

+0

क्या getView पर एनीमेशन (यदि मौजूद है) को रोकना संभव नहीं है? इसके अलावा, उस दृश्य के साथ क्या होगा जो पुनर्नवीनीकरण नहीं किया गया था? क्या यह अंततः विचारों के स्क्रैप पूल में जाएगा? –

1

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

3

उपयोग android.support.v4.view.ViewCompat.setHasTransientState (देखें देखने के लिए, बूलियन hasTransientState) android.support.v4.view.ViewCompatJB.setHasTransientState (देखें देखने के लिए, बूलियन hasTransientState)

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