2011-10-28 13 views
10

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

मेरी एडाप्टर वर्ग होना चाहिए:

private static class MyAdapter extends ArrayAdapter 

या

private class MyAdapter extends ArrayAdapter 

मुझे लगता है कि यह जब तक एडाप्टर गतिविधि संदर्भ के भीतर संलग्न लेकिन यह है कि इस बात की पुष्टि करना चाहता था है कोई फर्क नहीं करना चाहिए।

+0

(भविष्य के पाठकों के लिए) अंतिम प्रश्न पीछे की तरफ है। यदि आपके पास स्थिर आंतरिक कक्षा है, और गतिविधि/संदर्भ तक पहुंच की आवश्यकता है, तो आपको वीक रेफरेंस का उपयोग करना चाहिए (अगर ऐसी कोई चीज है जो गतिविधि को पार कर सकती है)। यदि कक्षा स्थिर और आंतरिक नहीं है, तो इसका बाहरी वर्ग का एक स्पष्ट संदर्भ है। उस स्थिति में, आपको अभी भी एडाप्टर का उपयोग करने के तरीके के बारे में सावधान रहना होगा। स्थिर का उपयोग करने से अंतर्निहित रिसाव मिल सकती है, लेकिन संदर्भ/कमजोर पड़ने के आसपास गुजरने में ओवरहेड जोड़ता है। – lilbyrdie

+0

इसके अलावा, एक ऑब्जेक्ट में किसी भी कॉल में जो ऑब्जेक्ट लेता है, संदर्भ उपलब्ध है (View.getContext())। आप यह सुनिश्चित करने के लिए उदाहरण का उपयोग कर सकते हैं कि यह आपकी गतिविधि है। – lilbyrdie

उत्तर

15

यदि आप एडाप्टर का उपयोग कैसे करते हैं, इस बारे में सावधान रहें तो संदर्भ पर होल्डिंग एडाप्टर के भीतर से ठीक है। एडाप्टर आमतौर पर उनके संदर्भ (एक गतिविधि) के जीवन चक्र से बंधे होते हैं, इसलिए यह ठीक है। केवल वीक रेफरेंस का उपयोग करें यदि यह समझ में आता है।

+0

क्या आप "एडाप्टर का उपयोग कैसे करें" भाग पर सावधानी बरत सकते हैं? तो ऐसा लगता है कि एडाप्टर गतिविधि जीवन चक्र से बंधे होने के बाद से दोनों में से कोई फर्क नहीं पड़ता। – dnkoutso

+1

एडाप्टर को स्थिर क्षेत्र में न रखें जो उदाहरण के लिए आपकी गतिविधियों से अधिक समय तक रहता है। –

+0

@RomainGuy क्या होगा अगर हम 'onDestroy() 'में स्थिर एडाप्टर ऑब्जेक्ट को स्पष्ट रूप से' शून्य 'करते हैं? क्या यह एक अच्छा दृष्टिकोण है? –

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