قبل أن نشارك BaseAdapter ، من المهم أولاً مراجعة المحول . في android ، المحول هو جسر بين مكون واجهة المستخدم ومصدر البيانات الذي يساعدنا على ملء البيانات في مكون واجهة المستخدم. إنها تحتفظ بالبيانات وترسل البيانات إلى عرض المحول ، ثم يمكن للعرض أن يأخذ البيانات من عرض المحول ويعرض البيانات على طرق عرض مختلفة مثل عرض القائمة ، عرض الشبكة ، الدوار الخ. لمزيد من التخصيص في طرق العرض ، نستخدم المحول الأساسي. الآن دعنا نناقش فئة BaseAdapter .
- BaseAdapter هو فئة أساسية شائعة للتنفيذ العام لمحول يمكن استخدامه في ListView و GridView و Spinner وما إلى ذلك.
- كلما احتجت إلى قائمة مخصصة في ListView أو شبكات مخصصة في GridView ، يمكنك إنشاء المحول الخاص بك وتوسيع المحول الأساسي في ذلك.
- يمكن تمديد Base Adaptor لإنشاء محول مخصص لعرض عنصر قائمة مخصص.
ملاحظة مهمة: ArrayAdapter هو أيضًا تطبيق BaseAdapter.
إليك رمز المحول المخصص عندما نقوم بتوسيع BaseAdapter في ذلك :
public class CustomAdapter extends BaseAdapter { @Override public int getCount() { return 0; } @Override public Object getItem(int i) { return null; } @Override public long getItemId(int i) { return 0; } @Override public View getView(int i, View view, ViewGroup viewGroup) { return null; }
في مقتطف الشفرة أعلاه ، نرى الطرق المتجاوزة لـ BaseAdapter والتي تُستخدم لتعيين البيانات في قائمة أو شبكة أو سبينر . من هناك ، استخدمنا وظيفتين أساسيتين getCount () و getView ().
دعونا نناقش كل هذه الوظائف بالتفصيل:
1. getCount ():
ترجع الدالة getCount () العدد الإجمالي للعناصر المراد عرضها في قائمة. تحسب القيمة من طريقة حجم قائمة الصفيف () أو طول المصفوفة. على سبيل المثال ، إذا كانت لدينا قائمة بالعناصر في قائمة المصفوفات وكان علينا عرض العناصر في طريقة عرض القائمة ، فيمكننا حساب العدد الإجمالي للعناصر باستخدام وظيفة الحجم ثم يتم إرجاع قيمة العدد الصحيح بواسطة الدالة getCount () كما هو مبين أدناه.
@Override public int getCount() { int count=arrayList.size(); //counts the total number of elements from the arrayList return count;//returns the total count to adapter }
2. getView (int i، View view، ViewGroup viewGroup):
يتم استدعاء هذه الوظيفة تلقائيًا عندما يكون عرض عنصر القائمة جاهزًا للعرض أو على وشك العرض. في هذه الوظيفة ، قمنا بتعيين التخطيط لعناصر القائمة باستخدام فئة LayoutInflater ثم أضفنا البيانات إلى طرق العرض مثل ImageView و TextView وما إلى ذلك.
يوجد أدناه رمز مثال لوظيفة getView مع شرح مضمن قمنا فيه بتعيين التخطيط باستخدام LayoutInflater ثم نحصل على معرف طريقة العرض وننفذها.
@Override public View getView(int i, View view, ViewGroup viewGroup) { view = inflter.inflate(R.layout.activity_gridview, null);//set layout for displaying items ImageView icon = (ImageView) view.findViewById(R.id.icon);//get id for image view icon.setImageResource(flags[i]);//set image of the item’s return view; }
3. getItem (int i):
تُستخدم هذه الوظيفة للحصول على عنصر البيانات المرتبط بالموقع المحدد في مجموعة البيانات للحصول على البيانات المقابلة للموقع المحدد في جمع عناصر البيانات.
يوجد أدناه رمز المثال الذي نعيد فيه عنصر قائمة المصفوفات وفقًا للموضع.
@Override public Object getItem(int i) { return arrayList.get(i); }
4. getItemId (int i):
أما بالنسبة لـ getItemId (الموضع int) ، فإنه يعيد المقابل لمعرّف عنصر الموضع. تقوم الدالة بإرجاع قيمة طويلة لموضع العنصر إلى المحول.
يوجد أدناه الكود الذي نعيد به الموضع.
@Override public long getItemId(int i) { return i; }
مثال BaseAdapter في Android Studio :
مثال 1: مثال على BaseAdapter لعرض صور الحيوان في شبكات باستخدام GridView .
في المثال أدناه نعرض صور الحيوانات في شكل شبكات باستخدام محول مخصص لإظهار استخدام BaseAdapter. فيما يلي الإخراج النهائي والكود مع الشرح:
الخطوة 2: افتح الآن res -> layout -> activity_main. xml (أو) main. xml وأضف الكود التالي. هنا سننشئ Gridview داخل LinearLayout:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <GridView android:id="@+id/simpleGridView" android:layout_width="fill_parent" android:layout_height="wrap_content" android:footerDividersEnabled="false" android:numColumns="3" /> </LinearLayout>
الخطوة 3: قم بإنشاء نشاط جديد activity_gridview. xml داخل التخطيط وأضف الكود أدناه:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <ImageView android:id="@+id/icon" android:layout_width="100dp" android:layout_height="100dp" android:scaleType="fitXY" android:layout_margin="5dp" android:layout_gravity="center_horizontal" /> </LinearLayout>
الخطوة 3: الآن افتح التطبيق -> java -> package -> MainActivity. جافا وإضافة الكود أدناه. تأكد من حفظ الصور في مجلد drawable بالأسماء التي استخدمناها أو قم بتغيير الاسم بناءً على الصور الموجودة في مجلدك القابل للرسم.
package example.abhiandriod.baseadapterexample; import android.app.Activity; import android.os.Bundle; import android.widget.GridView; public class MainActivity extends Activity { GridView simpleGrid; int animals[] = {R.drawable.animal13, R.drawable.animal14, R.drawable.animal15, R.drawable.animal16, R.drawable.animal17, R.drawable.animal18, R.drawable.animal15, R.drawable.animal16, R.drawable.animal17}; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); simpleGrid = (GridView) findViewById(R.id.simpleGridView); CustomAdapter customAdapter = new CustomAdapter(getApplicationContext(), animals); simpleGrid.setAdapter(customAdapter); } }
الخطوة 4: إنشاء فئة جديدة CustomAdapter. java داخل الحزمة وأضف الكود التالي
package example.abhiandriod.baseadapterexample; //Use your package import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; public class CustomAdapter extends BaseAdapter { Context context; int animals[]; LayoutInflater inflter; public CustomAdapter(Context applicationContext, int[] animals) { this.context = applicationContext; this.animals = animals; inflter = (LayoutInflater.from(applicationContext)); } @Override public int getCount() { return animals.length; } @Override public Object getItem(int i) { return null; } @Override public long getItemId(int i) { return 0; } @Override public View getView(int i, View view, ViewGroup viewGroup) { view = inflter.inflate(R.layout.activity_gridview, null); ImageView icon = (ImageView) view.findViewById(R.id.icon); icon.setImageResource(animals[i]); return view; } }
مخرج:
الآن قم بتشغيل التطبيق في Emulator / AVD وسترى الحيوانات مدرجة في الشبكات. إذن هذا أحد استخدامات BaseAdapter في Gridview.
مثال 2: مثال على BaseAdapter لعرض قائمة البلدان في ListView باستخدام Custom BaseAdapter
في المثال أدناه ، نعرض قائمة البلدان مع أعلامها باستخدام محول مخصص لإظهار استخدام BaseAdapter. يوجد أدناه الإخراج النهائي والكود مع شرح خطوة بخطوة.
Select File -> New -> New Project. Fill the forms and click "Finish" button.
الخطوة 2 : الآن افتح التطبيق -> res -> layout -> activity_main.xml (أو) main.xml وأضف الكود التالي:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <ListView android:id="@+id/simpleListView" android:layout_width="fill_parent" android:layout_height="wrap_content" android:divider="@color/material_blue_grey_800" android:dividerHeight="1dp" android:footerDividersEnabled="false" /> </LinearLayout>
الخطوة 3: الآن قم بإنشاء تخطيط XML آخر. في حالتنا ، نسميها activity_listview.xml. أضف الكود أدناه فيه. تأكد أيضًا من حفظ صورة iclauncher في مجلد drawable أو إضافته.
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="horizontal"> <ImageView android:id="@+id/icon" android:layout_width="50dp" android:layout_height="50dp" android:src="@drawable/ic_launcher" /> <TextView android:id="@+id/textView" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_gravity="center" android:padding="@dimen/activity_horizontal_margin" android:textColor="#000" /> </LinearLayout>
الخطوة 4: الآن افتح التطبيق -> java-> package -> MainActivity.java وأضف الكود أدناه.
package example.abhiandriod.baseadapterexample; import android.app.Activity; import android.os.Bundle; import android.widget.ListView; public class MainActivity extends Activity { ListView simpleList; String countryList[] = {"India", "China", "australia", "Portugle", "America", "NewZealand"}; int flags[] = {R.drawable.india, R.drawable.china, R.drawable.australia, R.drawable.portugle, R.drawable.america, R.drawable.new_zealand}; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); simpleList = (ListView) findViewById(R.id.simpleListView); CustomAdapter customAdapter = new CustomAdapter(getApplicationContext(), countryList, flags); simpleList.setAdapter(customAdapter); } }
الخطوة 4: إنشاء فئة جديدة CustomAdapter.java وإضافة التعليمات البرمجية التالية
package example.abhiandriod.baseadapterexample; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.ImageView; import android.widget.TextView; public class CustomAdapter extends BaseAdapter { Context context; String countryList[]; int flags[]; LayoutInflater inflter; public CustomAdapter(Context applicationContext, String[] countryList, int[] flags) { this.context = context; this.countryList = countryList; this.flags = flags; inflter = (LayoutInflater.from(applicationContext)); } @Override public int getCount() { return countryList.length; } @Override public Object getItem(int i) { return null; } @Override public long getItemId(int i) { return 0; } @Override public View getView(int i, View view, ViewGroup viewGroup) { view = inflter.inflate(R.layout.activity_listview, null); TextView country = (TextView) view.findViewById(R.id.textView); ImageView icon = (ImageView) view.findViewById(R.id.icon); country.setText(countryList[i]); icon.setImageResource(flags[i]); return view; } }
انتاج:
قم الآن بتشغيل التطبيق في Emulator / AVD وسترى أسماء بلدان العنصر مع وجود أعلام مدرجة في ListView.