شرح المحول Custom ArrayAdapter في الاندرويد

ArrayAdapter هو نوع من محول الذي يعمل جسرا بين عنصر واجهة المستخدم ومصدر البيانات التي تساعدنا على تعبئة البيانات في عنصر واجهة المستخدم. تتوقع تخطيطًا باستخدام TextView واحد ولمزيد من التخصيص في عناصر الشبكة أو عناصر القائمة ، نستخدم محولات مخصصة.

  • ArrayAdapter هو أيضًا تطبيق BaseAdapter لذلك إذا أردنا المزيد من التخصيص ، فإننا ننشئ محولًا مخصصًا ونوسع ArrayAdapter في ذلك.
  • نحن تجاوز كل وظيفة من BaseAdapter في عادتنا محول لاعطاء مزيد من التخصيص لArrayAdapter.

كود محول Android المخصص عندما نقوم بتوسيع ArrayAdapter في ذلك:

  
  public class MyAdapter extends ArrayAdapter {

	public MyAdapter(Context context, int resource, int textViewResourceId, List objects) {
	super(context, resource, textViewResourceId, objects);
	}

	@Override
	public int getCount() {
	return super.getCount();
	}

	@Override
	public View getView(int position, View convertView, ViewGroup parent) {
	return super.getView(position, convertView, parent);
	}
	}
  
  

في مقتطف الشفرة أعلاه ، نرى الوظائف المتجاوزة لـ ArrayAdapter والتي تُستخدم لتعيين البيانات في قائمة أو شبكة أو سبينر . من هناك ، استخدمنا وظيفتين أساسيتين 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_list_view, null);//set layout for displaying items
	ImageView icon = (ImageView) view.findViewById(R.id.icon);//get id for image view
	icon.setImageResource(countryFlags[i]);//set image of the item’s
	return view;
	}
  
  

مثال على ArrayAdapter المخصص :

يوجد أدناه المثال ، الذي نعرض فيه قائمة بأسماء الحيوانات مع الصور في عرض القائمة باستخدام محول مصفوفة بسيط. فيما يلي الناتج النهائي والكود:

تحميل الكود ؟

مثال ArrayAdapter المخصص في ListView
الخطوة 1: قم بإنشاء مشروع جديد وقم بتسميته ArrayAdapterExample.

  
  Select File -> New -> New Project -> and Fill the forms and click "Finish" button
  
  

الخطوة 2: الآن افتح res -> layout ->  xml (or) activity_main.xml  وأضف الكود التالي:

  <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <ListView
	android:id="@+id/simpleListView"
	android:layout_width="match_parent"
	android:layout_height="wrap_content"
	android:divider="#000"
	android:dividerHeight="2dp"/>

	</RelativeLayout>
  

الخطوة 3: قم بإنشاء تخطيط جديد في res-> التخطيط وقم بتسميته list_view_items. 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="wrap_content"
    android:orientation="horizontal">

    <ImageView
	android:id="@+id/imageView"
	android:layout_width="50dp"
	android:layout_height="50dp"
	android:padding="5dp"
	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:text="Demo"
	android:textColor="#000" />
	</LinearLayout>
  

الخطوة 4: الآن افتح  -> java -> package -> MainActivity. جافا وإضافة الكود أدناه.

	
  package example.abhiandriod.customarrayadapterexample;

	import android.support.v7.app.AppCompatActivity;
	import android.os.Bundle;
	import android.widget.ArrayAdapter;
	import android.widget.ListView;

	import java.util.ArrayList;

	public class MainActivity extends AppCompatActivity {

    ListView simpleList;
    ArrayList<Item> animalList=new ArrayList<>();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
	super.onCreate(savedInstanceState);
	setContentView(R.layout.activity_main);
	simpleList = (ListView) findViewById(R.id.simpleListView);
	animalList.add(new Item("Lion",R.drawable.lion));
	animalList.add(new Item("Tiger",R.drawable.tiger));
	animalList.add(new Item("Monkey",R.drawable.monkey));
	animalList.add(new Item("Elephant",R.drawable.elephant));
	animalList.add(new Item("Dog",R.drawable.dog));
	animalList.add(new Item("Cat",R.drawable.cat));

	MyAdapter myAdapter=new MyAdapter(this,R.layout.list_view_items,animalList);
	simpleList.setAdapter(myAdapter);
	}
	}
  
  
  

الخطوة 5: قم بإنشاء كلاس Class جديد -> java -> package-> MyAdapter.java وأضف الكود أدناه. هنا في فئة المحول المخصص ، نتجاوز وظيفة BaseAdapter.

  package example.abhiandriod.customarrayadapterexample;

	import android.content.Context;
	import android.view.LayoutInflater;
	import android.view.View;
	import android.view.ViewGroup;
	import android.widget.ArrayAdapter;
	import android.widget.ImageView;
	import android.widget.TextView;

	import java.util.ArrayList;
	import java.util.HashMap;

	public class MyAdapter extends ArrayAdapter<Item> {

    ArrayList<Item> animalList = new ArrayList<>();

    public MyAdapter(Context context, int textViewResourceId, ArrayList<Item> objects) {
	super(context, textViewResourceId, objects);
	animalList = objects;
    }

    @Override
    public int getCount() {
	return super.getCount();
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

	View v = convertView;
	LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
	v = inflater.inflate(R.layout.list_view_items, null);
	TextView textView = (TextView) v.findViewById(R.id.textView);
	ImageView imageView = (ImageView) v.findViewById(R.id.imageView);
	textView.setText(animalList.get(position).getAnimalName());
	imageView.setImageResource(animalList.get(position).getAnimalImage());
	return v;

    }

	}
 
  

الخطوة 6: قم بإنشاء كلاس جديدة src-> package-> Item.java وأضف الكود أدناه:

package example.abhiandriod.customarrayadapterexample;


	public class Item {

    String animalName;
    int animalImage;

    public Item(String animalName,int animalImage)
    {
	this.animalImage=animalImage;
	this.animalName=animalName;
    }
    public String getAnimalName()
    {
	return animalName;
    }
    public int getAnimalImage()
    {
	return animalImage;
    }
	}
  
  


مخرج :

الآن قم بتشغيل التطبيق في Emulator وسترى اسم الحيوانات مدرجًا بالصور. لهذا استخدمنا ArrayAdapter المخصص.

مثال ArrayAdapter المخصص في ListView


المثال 2: أدناه هو المثال الذي نعرض فيه صور الحيوانات في الشبكة الخاصة بعرض الشبكة باستخدام ArrayAdapter المخصص. فيما يلي الناتج النهائي والكود:

تحميل الكود ؟

مثال ArrayAdapter المخصص في Gridview
الخطوة 1: قم بإنشاء مشروع جديد وقم بتسميته ArrayAdapterExample .

حدد ملف -> جديد -> مشروع جديد. املأ الاستمارات وانقر فوق الزر "إنهاء".

الخطوة 2: الآن افتح التطبيق -> res -> layout -> activity_main. xml (أو) main. xml  وأضف الكود التالي:

	
  
  <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <GridView
	android:id="@+id/simpleGridView"
	android:layout_width="match_parent"
	android:layout_height="wrap_content"
	android:numColumns="2"/>

	</RelativeLayout>
  

الخطوة 3: قم بإنشاء نشاط تخطيط layout جديد في التطبيق -> res-> layout-> نشاط جديد وقم بتسميته grid_view_items.xml وأضف الكود التالي:

  <?xml version="1.0" encoding="utf-8"?>
	<RelativeLayout 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/imageView"
	android:layout_width="150dp"
	android:layout_height="150dp"
	android:layout_centerInParent="true"
	android:padding="5dp"
	android:scaleType="fitXY"
	android:src="@drawable/ic_launcher" />

    <TextView
	android:id="@+id/textView"
	android:layout_width="wrap_content"
	android:layout_height="wrap_content"
	android:layout_centerInParent="true"
	android:padding="@dimen/activity_horizontal_margin"
	android:text="Demo"
	android:textColor="#000" />
	</RelativeLayout>
  
  

الخطوة 4: الآن افتح التطبيق -> جافا -> الحزمة -> MainActivity.java

	
  package example.abhiandriod.customarrayadapterexample;

	import android.support.v7.app.AppCompatActivity;
	import android.os.Bundle;
	import android.widget.GridView;
	import java.util.ArrayList;

	public class MainActivity extends AppCompatActivity {

    GridView simpleList;
    ArrayList<Item> animalList=new ArrayList<>();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
	super.onCreate(savedInstanceState);
	setContentView(R.layout.activity_main);
	simpleList = (GridView) findViewById(R.id.simpleGridView);
	animalList.add(new Item("Lion",R.drawable.lion));
	animalList.add(new Item("Tiger",R.drawable.tiger));
	animalList.add(new Item("Monkey",R.drawable.monkey));
	animalList.add(new Item("Elephant",R.drawable.elephant));
	animalList.add(new Item("Dog",R.drawable.dog));
	animalList.add(new Item("Cat",R.drawable.cat));

	MyAdapter myAdapter=new MyAdapter(this,R.layout.grid_view_items,animalList);
	simpleList.setAdapter(myAdapter);
    }
	}
  
  

الخطوة 5: قم بإنشاء فئة او كلاس جديدة src -> package -> MyAdapter.java وأضف الكود التالي:

  package example.abhiandriod.customarrayadapterexample;

	import android.content.Context;
	import android.view.LayoutInflater;
	import android.view.View;
	import android.view.ViewGroup;
	import android.widget.ArrayAdapter;
	import android.widget.ImageView;
	import android.widget.TextView;

	import java.util.ArrayList;

	public class MyAdapter extends ArrayAdapter<Item> {

    ArrayList<Item> animalList = new ArrayList<>();

    public MyAdapter(Context context, int textViewResourceId, ArrayList<Item> objects) {
	super(context, textViewResourceId, objects);
	animalList = objects;
    }

    @Override
    public int getCount() {
	return super.getCount();
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

	View v = convertView;
	LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
	v = inflater.inflate(R.layout.grid_view_items, null);
	TextView textView = (TextView) v.findViewById(R.id.textView);
	ImageView imageView = (ImageView) v.findViewById(R.id.imageView);
	textView.setText(animalList.get(position).getAnimalName());
	imageView.setImageResource(animalList.get(position).getAnimalImage());
	return v;

    }

	}
  
  

الخطوة 6: قم بإنشاء فئة جديدة src -> package -> Item.java وأضف الكود أدناه:

package example.abhiandriod.customarrayadapterexample;

	/**
	* Created by Gourav on 10-01-2016.
	*/
	public class Item {

    String animalName;
    int animalImage;

    public Item(String animalName,int animalImage)
    {
	this.animalImage=animalImage;
	this.animalName=animalName;
    }
    public String getAnimalName()
    {
	return animalName;
    }
    public int getAnimalImage()
    {
	return animalImage;
    }
	}