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


100

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

मैं वह हासिल कर रहा हूं जो मैं चाहता हूं ArrayAdapters

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

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


2
डेवलपर .android.com/reference/android/widget/… । ArrayAdpter। डेवलपर .android.com/reference/android/widget/BaseAdapter.html । BaseAdapter। ArrayAdapter BaseAdapter का एक ठोस उप वर्ग है
रघुनंदन

5
बस ArrayAdapter पहले से ही निर्मित है, हमें बस इसका उपयोग करने की आवश्यकता है। लेकिन बेस एडेप्टर अधिक सामान्य एडेप्टर है जिसके लिए हमें कार्यान्वयन प्रदान करने की आवश्यकता है। (getView (), getcount () आदि तरीके एडेप्टर में)
प्रग्नानी

जवाबों:


111

यहाँ अंतर है:

  • BaseAdapterएक बहुत ही सामान्य एडेप्टर है जो आपको जो कुछ भी आप चाहते हैं वह बहुत अधिक करने की अनुमति देता है। हालाँकि, आपको इसे काम करने के लिए थोड़ा और कोडिंग करना होगा।
  • ArrayAdapterएक अधिक पूर्ण कार्यान्वयन है जो सरणियों या ArrayListएस में डेटा के लिए अच्छी तरह से काम करता है । इसी तरह, एक संबंधित है CursorAdapterजिसे आपको उपयोग करना चाहिए यदि आपका डेटा एक में है Cursor। ये दोनों विस्तार करते हैं BaseAdapter

यदि आपका डेटा किसी प्रकार के विशेष संग्रह में है या यदि आप डिफ़ॉल्ट व्यवहार नहीं चाहते हैं जो ArrayAdapterप्रदान करता है, तो आप संभवतः BaseAdapterउस लचीलेपन को प्राप्त करना चाहेंगे जो आपको चाहिए।

प्रत्येक का प्रदर्शन वास्तव में इस बात पर निर्भर करता है कि आप उन्हें कैसे लागू करते हैं या उनके व्यवहार को बदलते हैं। अपने मूल में, या तो एक बस प्रभावी रूप (विशेष रूप से विचार कर रहा है कि एक हो सकता है ArrayAdapter है एक BaseAdapter)।

आप किसी भी एडॉप्टर के साथ जो चाहें, बहुत सुंदर कर सकते हैं, लेकिन ध्यान रखें कि BaseAdapterयह सार है, इसलिए आप इसे सीधे उपयोग नहीं कर सकते।


2
डिफ़ॉल्ट व्यवहार जो ArrayAdapterप्रदान करता है (जैसा कि @ tanis-7x द्वारा उल्लेख किया गया है) यह है कि TextViewसूची आइटम के अंदर केवल 1 हो सकता है , वास्तव में बहुत सीमित व्यवहार। यदि प्रत्येक सूची आइटम में कई नियंत्रण हैं, तो आपको उपयोग करना होगा BaseAdapterऔर अपने आप को नौकरी पर रखना होगा । बेशक आप अभी भी उपयोग कर सकते हैं ArrayAdapter, क्योंकि ArrayAdapterBaseAdapter
फेलिक्स

21

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

इसके अलावा, क्या यह सूची दृश्य के प्रदर्शन को प्रभावित करता है

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

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

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

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


9

आपके 3 सवालों के जवाब में:

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

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

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


7

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

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;
   }

}

और ArrayAdapter की तरह बेस एडेप्टर में निर्दिष्ट DataType पर कोई ज़रूरत नहीं है। उदाहरण: ArrayAdapter <String>
John

यह भी कि आपको List<T> UserList;उस वर्ग में कभी भी उपयोग नहीं करना चाहिए जो फैली हुई है ArrayAdapter<T>
सेल्विन

6
private static final String[] COUNTRIES = new String[]{
            "Afghanistan", "Angola", "Australia", "Bangladesh", "Belgium",
            "Bhutan", "Brazil", "Canada", "China", "Denmark"
    };

ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_dropdown_item_1line, COUNTRIES);
AutoCompleteTextView textView = (AutoCompleteTextView) findViewById(R.id.countries_list);
textView.setAdapter(adapter);

यहाँ हम ArrayAdapter की तरह BaseAdapter का उपयोग नहीं कर सकते।


3

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

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

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

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

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.