বেসএডাপ্টার এবং অ্যারেএডাপ্টারের মধ্যে পার্থক্য কী?


100

আমি ব্যবহার BaseAdapterএবং এর মধ্যে পার্থক্য জানতে চাই ArrayAdapter

আমি যা চাই তা অর্জন করে চলেছি ArrayAdapters

এটি ListViewযে অ্যাডাপ্টারের ইন্টারফেসে এটি প্রয়োগ করা হয় তার কার্যকারিতা প্রভাবিত করে ?

এবং, শেষ প্রশ্নটি হ'ল, আমি ListViewএগুলির যে কোনও একটি ব্যবহার করে কি কিছু অর্জন করতে পারি Adapters, বা নির্দিষ্ট কিছু অ্যাডাপ্টার কেবল ব্যবহার করা যেতে পারে?


2
বিকাশকারী.অ্যান্ড্রয়েড . com/references/android/widget/… । ArrayAdpter। বিকাশকারী.অ্যান্ড্রয়েড . com/references/android/widget/BaseAdapter.html । BaseAdapter। অ্যারেএডাপ্টার বেসএডাপ্টারের একটি কংক্রিট সাব ক্লাস
রঘুনন্দন

5
কেবল অ্যারেএডাপ্টার ইতিমধ্যে নির্মিত হয়েছে, আমাদের কেবল এটি ব্যবহার করা দরকার। কিন্তু BaseAdapter আরো জেনেরিক অ্যাডাপ্টারের যার জন্য আমরা বাস্তবায়ন প্রদান করতে হবে (getView (), getcount () ইত্যাদি অ্যাডাপ্টার পদ্ধতি)।
Pragnani

উত্তর:


111

এখানে পার্থক্য:

  • BaseAdapterএকটি খুব জেনেরিক অ্যাডাপ্টার যা আপনাকে যা খুশি তাই করতে দেয়। তবে এটিকে কাজ করার জন্য আপনাকে আরও কোডিং করতে হবে।
  • ArrayAdapterএকটি আরও সম্পূর্ণ বাস্তবায়ন যা অ্যারে বা ArrayListএর ডেটার জন্য ভাল কাজ করে । একইভাবে, CursorAdapterআপনার সম্পর্কিত ডেটা যদি একটিতে থাকে তবে আপনার একটি ব্যবহার সম্পর্কিত উচিত Cursor। এই উভয় প্রসারিত BaseAdapter

যদি আপনার ডেটা কোনও সাজানোর বিশেষায়িত সংগ্রহে থাকে বা আপনি যদি ডিফল্ট আচরণ সরবরাহ করে না চান তবে আপনার প্রয়োজনীয় নমনীয়তা পেতে ArrayAdapterআপনি সম্ভবত প্রসারিত BaseAdapterকরতে চাইবেন ।

প্রত্যেকের কর্মক্ষমতা আপনি কীভাবে তাদের বাস্তবায়ন করেন বা তাদের আচরণ পরিবর্তন করেন তার উপর নির্ভর করে। তাদের মূলে রয়েছে সেই হয় এক মাত্র কার্যকর হিসাবে (বিশেষ করে বিবেচনা করা যে হতে পারে ArrayAdapter হয় একটি BaseAdapter)।

আপনি যে কোনও অ্যাডাপ্টারের সাহায্যে যা কিছু করতে পারেন তা করতে পারেন তবে BaseAdapterএটি বিমূর্ত মনে রাখবেন , যাতে আপনি এটি সরাসরি ব্যবহার করতে পারবেন না।


2
ArrayAdapter(@ ট্যানিস -7 এক্স দ্বারা উল্লিখিত) যে ডিফল্ট আচরণ সরবরাহ করে তা হ'ল TextViewতালিকার আইটেমের ভিতরে কেবল 1 থাকতে পারে , আসলে খুব সীমিত আচরণ। প্রতিটি তালিকার আইটেমটিতে যদি একাধিক নিয়ন্ত্রণ থাকে তবে আপনাকে অবশ্যই BaseAdapterনিজের দ্বারা কাজটি ব্যবহার করতে হবে । অবশ্যই আপনি এখনও ব্যবহার করতে পারেন ArrayAdapter, কারণ ArrayAdapterএটি একটি BaseAdapter
ফেলিক্স

21

BaseAdapterArrayAdapterপ্রসারিত অবস্থায় এটি বিমূর্ত হয় BaseAdapter(এটি ক এর একটি কংক্রিট বাস্তবায়ন BaseAdapter)। যদি আপনি প্রসারিত করেন তবে আপনার ArrayAdapterসমস্ত ArrayAdapterবৈশিষ্ট্য উত্তরাধিকার সূত্রে প্রাপ্ত হচ্ছে এবং এর বাস্তবায়ন ওভাররাইড করে আপনি ArrayAdapterআচরণটি পরিবর্তন করতে পারেন । যদি আপনি প্রসারিত করেন তবে BaseAdapterআপনাকে অবশ্যই সমস্ত বিমূর্ত পদ্ধতি প্রয়োগ করতে হবে, যে অ্যারেএডাপ্টার ইতিমধ্যে প্রয়োগ করে।

এছাড়াও, এটি তালিকাভিউয়ের কর্মক্ষমতাকে প্রভাবিত করে?

না এটা না।

এবং, শেষ প্রশ্নটি হল, আমি তালিকার সাথে এই অ্যাডাপ্টারগুলির কোনও ব্যবহার করে কি কিছু অর্জন করতে পারি, বা এমন কিছু ক্ষেত্রে রয়েছে যেখানে নির্দিষ্ট অ্যাডাপ্টার কেবল ব্যবহার করা যায়?

যদি এসডিকে বাস্তবায়ন আপনার চাহিদা পূরণ করে তবে আপনাকে এটিকে ওভাররাইড করার এবং চাকাটি পুনরায় উদ্ভাবন করার প্রয়োজন কেন?

তাদের মধ্যে প্রধান পার্থক্য হ'ল BaseAdapter যখন ArrayAdapterসম্ভব তাত্ক্ষণিক হতে পারে না


9

আপনার 3 টি প্রশ্নের জবাবে:

(1) অ্যান্ড্রয়েড ডক্স অনুসারে বেসএডাপ্টারটি হ'ল বেশ কয়েকটি অ্যাডাপ্টার ধরণের একটি সুপারক্লাস, যার মধ্যে একটি ArrayAdapter। বিভিন্ন সংখ্যক অ্যাডাপ্টার রয়েছে যেগুলি BaseAdapterবিভিন্ন কারণে উপযুক্ত। ফলস্বরূপ এটি অপ্রকাশ্য উভয়ের মধ্যে দক্ষতার মধ্যে কোনও পার্থক্য রয়েছে; আপনি কেবল বিভিন্ন উপক্লাসের সাথে বিভিন্ন ফাংশন / পদ্ধতিগুলির অ্যাক্সেস পান।

(২) আপনার ArrayAdapterদক্ষতা আপনি সেই শ্রেণীর ভিতরে কী করছেন তার দক্ষতার উপর নির্ভর করে, অর্থাৎ বিটম্যাপস এবং অন্যান্য ডেটা প্রক্রিয়াকরণ।

(3) আপনি সম্ভবত ListViewএকটি ভিন্ন ধরণের অ্যাডাপ্টার ব্যবহার করে আপনার কাজ করার কোনও উপায় খুঁজে বের করতে পারেন , তবে ArrayAdapterএটির কারণটি কাজ করে কারণ এটি সাধারণত লক্ষ্যটি প্রদত্ত হয়ে একটি ইন্টারেক্টিভ তালিকা তৈরি করা হয়। ArrayAdapteএকটি সময় লাগে Arrayসাধারণত একটি, ArrayListবস্তুর, তারপর জন্য ব্যাকিং তথ্য তৈরি করতে প্রক্রিয়া ListView। সেই অর্থে ArrayList-> ArrayAdapter-> এর সেট আপটি ListViewকেবল যুক্তিযুক্তভাবেই বোঝায়।


7

বেসএডাপ্টার এবং অ্যারেএডাপ্টারের মধ্যে আরও একটি পার্থক্য হ'ল আপনি যদি অ্যারে অ্যাডাপ্টার প্রসারিত করেন তবে আপনাকে সাবক্লাস কনস্ট্রাক্টরে সুপার ক্লাস কনস্ট্রাক্টর কল করতে হবে।

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

}

এবং অ্যারেএডাপ্টারের মতো বেসএডাপ্টারে নির্দিষ্ট করা ডেটা টাইপের কোনও প্রয়োজন নেই। উদাহরণ: অ্যারেএডাপ্টার <স্ট্রিং>
জন

এছাড়াও আপনার 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);

এখানে আমরা অ্যারেএডাপ্টারের মতো বেসএডাপ্টার ব্যবহার করতে পারি না।


3

BaseAdapterগুলি আরও ন্যূনতম এবং কাস্টমাইজযোগ্য। ArrayAdapters এর সর্বাধিক সাধারণ ব্যবহারগুলি বাস্তবায়ন করে ListAdapterতবে কখনও কখনও এটি পর্যাপ্ত হয় না।

যাইহোক, প্রায় সব কিছু ব্যবহার করে অর্জন করা যায় ArrayAdapter। যদি আপনার তালিকাগুলি ইতিমধ্যে অ্যারেএডাপ্টারটি সঠিকভাবে ব্যবহার করে কাজ করছে, আপনার কাছে বেসএডাপ্টার থেকে লাভ করার কিছুই নেই।

তবে, আপনি যদি আপনার Context, Arraysবা Listsআপনার অ্যারেএডাপ্টার বাস্তবায়নে সংরক্ষণ করছেন, তবে আপনি ইতিমধ্যে তাদের প্রয়োগ করে BaseAdapterযেমন স্যুইচ করতে চাইবেন ArrayAdapter

যাইহোক, আপনি যদি এটি করেন তবে আপনি সর্বদা সেই আইটেমগুলি সরিয়ে ফেলতে পারেন এবং getItem()অ্যারের আইটেমগুলি পেতে, অ্যারের getCount()আকার পেতে এবং getContext()আপনার দৃষ্টিভঙ্গি বাড়ানোর জন্য অবলম্বন করতে পারেন ।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.