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
कर सकते हैं