شرح الفئة BaseAdapter في الاندرويد

قبل أن نشارك 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. فيما يلي الإخراج النهائي والكود مع الشرح:

الخطوة 1: قم بإنشاء مشروع جديد وقم بتسميته BaseAdapterExample.

الخطوة 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. يوجد أدناه الإخراج النهائي والكود مع شرح خطوة بخطوة.

الخطوة 1: قم بإنشاء مشروع جديد في Android Studio وقم بتسميته BaseAdapterExample

	
    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.