android - बेसएडाप्टर और ऐरे एडाप्टर के बीच क्या अंतर है?




performance listview (4)

आपके 3 प्रश्नों के जवाब में:

(1) एंड्रॉइड डॉक्स के अनुसार developer.android.com/reference/android/widget/BaseAdapter.html , केवल एडाप्टर प्रकारों की एक ArrayAdapter है, जिसमें से एक ArrayAdapter । ऐसे कई अन्य एडाप्टर हैं जो BaseAdapter से प्राप्त किए BaseAdapter जो विभिन्न उद्देश्यों के अनुरूप हैं। नतीजतन यह असंभव है कि दोनों के बीच दक्षता में कोई अंतर है; आप विभिन्न उप-वर्गों के साथ कार्यों / विधियों के एक अलग सेट तक पहुंच प्राप्त करते हैं।

(2) आपके ArrayAdapter की दक्षता उस वर्ग के अंदर आप जो कर रहे हैं उसकी दक्षता पर निर्भर करती है, यानी बिटमैप्स और अन्य डेटा की प्रसंस्करण।

(3) शायद आप एक अलग प्रकार के एडाप्टर का उपयोग करके अपनी ArrayAdapter को काम करने का एक तरीका समझ सकते हैं, हालांकि, कारण ArrayAdapter काम करता है क्योंकि आमतौर पर यह समझ में आता है कि लक्ष्य एक इंटरैक्टिव सूची बनाना है। ArrayAdapte एक Array लेता है, आमतौर पर वस्तुओं का एक ArrayAdapte , यह तब ListView लिए बैकिंग जानकारी बनाने के लिए प्रक्रिया करता है। उस अर्थ में ArrayList की स्थापना -> ArrayAdapter -> ListView केवल तार्किक रूप से समझ में आता है।

मैं BaseAdapter और ArrayAdapter का उपयोग करने के बीच अंतर जानना चाहता ArrayAdapter

मैं ArrayAdapters माध्यम से जो चाहता हूं उसे प्राप्त कर रहा ArrayAdapters

क्या यह एडाप्टर इंटरफ़ेस पर ListView के प्रदर्शन को प्रभावित करता है जिसमें इसे कार्यान्वित किया जाता है?

और, आखिरी सवाल यह है कि, क्या मैं इनमें से किसी भी Adapters का उपयोग करके ListView साथ कुछ भी हासिल कर सकता हूं, या ऐसे कुछ मामले हैं जहां विशिष्ट एडाप्टर का उपयोग किया जा सकता है?


बेसएडाप्टर और ऐरेएडाप्टर के बीच एक और अंतर यह है कि, यदि आप सरणी एडाप्टर का विस्तार करते हैं तो आपको उप-वर्ग निर्माता में सुपर क्लास कन्स्ट्रक्टर को कॉल करना होगा।

UserListAdapter extends ArrayAdapter<String>{

   List<String> UserList;
   Context context;

   public UserListAdapter(Context context, int resource,List<String> listUsers) {
     super(context, resource, listUsers);      /* Super class constructor is called */
     UserList = listUsers;
     this.context = context;
   }

}

लेकिन बेसएडाप्टर के लिए कोई सुपर क्लास नहीं है। जैसा कि बेस एडाप्टर अन्य सभी एडेप्टर के लिए सुपर क्लास के रूप में कार्य करता है

UserListAdapter extends BaseAdapter{

   List<String> UserList;
   Context context;

   public UserListAdapter(Context context, int resource,List<String> listUsers) {
     /* No super class constructor */
     UserList = listUsers;
     this.context = context;
   }

}

BaseAdapter अधिक न्यूनतम और अनुकूलन योग्य हैं। ArrayAdapter एस ArrayAdapter एस के सबसे सामान्य उपयोग को लागू करता है, लेकिन कभी-कभी वे पर्याप्त नहीं होते हैं।

हालांकि, ArrayAdapter एस के उपयोग से लगभग सब कुछ हासिल किया जा सकता है। यदि आपकी सूचियां पहले से ही ArrayAdapter का उपयोग करके काम कर रही हैं, तो आपके पास बेसएडाप्टर से लाभ प्राप्त करने के लिए कुछ भी नहीं है।

हालांकि, अगर आप अपने ArrayAdapter कार्यान्वयन में अपना Context , Arrays या Lists संग्रहीत कर रहे हैं, तो शायद आप BaseAdapter पर स्विच करना BaseAdapter , क्योंकि ArrayAdapter पहले ही उन्हें लागू कर चुका है।

वैसे भी, यदि आप ऐसा कर रहे हैं, तो आप हमेशा उन वस्तुओं को हटा सकते हैं, और ऐरे आइटम प्राप्त करने के लिए getItem() का उपयोग करने के लिए, सरणी के आकार को प्राप्त करने के लिए getCount() प्राप्त करें, और अपने विचारों को बढ़ाने के लिए getContext() प्राप्त करें।


BaseAdapter सार है जबकि ArrayAdapter बढ़ाता है (यह BaseAdapter का एक ठोस कार्यान्वयन है)। यदि आप ArrayAdapter लिए ArrayAdapter करते हैं तो आप सभी ArrayAdapter की सुविधाओं को ArrayAdapter रहे हैं और इसके कार्यान्वयन को ओवरराइड करते हैं, आप ArrayAdapter beahviour को संशोधित कर सकते हैं। यदि आप BaseAdapter विस्तारित BaseAdapter तो आपको सभी सार विधियों को लागू करना होगा, जो ArrayAdapter पहले ही लागू हो।

साथ ही, यह ListView के प्रदर्शन को प्रभावित करता है

नहीं, यह नहीं है।

और, आखिरी सवाल यह है कि, क्या मैं इनमें से किसी भी एडाप्टर का उपयोग करके ListView के साथ कुछ भी हासिल कर सकता हूं, या ऐसे कुछ मामले हैं जहां विशिष्ट एडाप्टर का उपयोग किया जा सकता है?

यदि एसडीके में कार्यान्वयन आपकी आवश्यकताओं को पूरा करता है तो आपको इसे ओवरराइड करने और पहिया का फिर से आविष्कार करने की आवश्यकता क्यों है?

मुख्य अंतर यह है कि उन्हें पता है कि BaseAdapter को BaseAdapter नहीं किया जा सकता है जबकि ArrayAdapter कर सकते हैं





baseadapter