BaseAdapter trong Android
Trong android, Một adapter liên kết dữ liệu với các thành phần UI. Nó điều khiển dữ liệu và gửi dữ liệu đến adapter view và sau đó lấy dữ liệu từ adapter view và hiển thị dữ liệu trên dữ liệu các view khác nhau như: ListView, GridView, Spinner.
- BaseAdapter là lớp adpater cơ sở cho các Adapter thường dùng khác như ArrayAdapter<T>, CursorAdapter, SimpleAdapter. BaseAdapter thường đóng vai trò Adapter cho các ListView và Spinner sẽ được tìm hiểu trong các phần tiếp theo.
 - Bất cứ khi nào khi bạn cần tùy chỉnh lại list trong ListView hoặc grid trong GridView, Chúng ta tạo riêng một adapter kế thừa từ BaseAdapter
 
Ví dụ sau tùy biến Adapter từ 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;  }    Trong ví dụ trên chúng ta ghi đè (override) các phương thức BaseAdapter thường được sử dụng trong ListView, GridView, Spinner
1. getCount(): Phương thức này trả về số dòng của List
  @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): Phương thức này được gọi tự động các mục danh sách để sẵn sàng hiển thị. Trong phương thức chúng ta thiết lập layout cho danh sách các mục bằng cách sử dụng lớp LayoutInflater và sau đó thêm dữ liệu cho các view: ImageView, TextView .v.v.
  @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): : Phương thức này trả về Object dựa vào vị trí của đối tượng đó trong mảng dữ liệu
Vị trí sau lấy đối tượng thông qua vị trí
  @Override  public Object getItem(int i) {  return arrayList.get(i);  }    4. getItemId(int i): Phương thức này trả về id trên View của từng item mà adapter tạo ra.
Ví dụ sau chúng ta trả về vị trí
  @Override  public long getItemId(int i) {  return i;  }    
Ví dụ: Trong ví dụ này chúng ta sẽ làm ứng dụng gồm có một GridView để hiển thị danh hình ảnh các động vật. Tiến hành tạo project, vào thư mục res /layout -> activity_main.xml thiết kế giao diện sau:
Bước 1: Tạo một project tên là BaseAdapter: File->New->Android Application Project điền các thông tin ->Next ->Finish
Bước 2: Mở res -> layout -> xml (hoặc) activity_main.xml và thêm code trong Linear Layout.
  <?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>    Bước 3: Tạo mới một Activity activity_gridview.xml vào trong thư mục layout và thêm code sau:
  <?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>    Bước 4: Tạo mới một lớp CustomAdapter.java bên trong package và thêm code sau:
  package com.example.baseadapter;    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 CustomBaseAdapter extends BaseAdapter {  Context context;  int animals[];  LayoutInflater inflter;    public CustomBaseAdapter(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;  }  }    Bước 5: Open   src -> package -> MainActivity.java
  Trong bước này chúng ta khởi tạo GridView. Tiếp theo, chúng ta tạo 1 mảng cho image. Lưu các hình ảnh vào thư mục drawable
  package com.example.baseadapter;    import android.app.Activity;  import android.os.Bundle;  import android.view.Menu;  import android.view.MenuItem;  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);  		CustomBaseAdapter adapter	=	new  CustomBaseAdapter(getApplication(), animals);  		simpleGrid.setAdapter(adapter);  	}  	  }      Ứng dụng này được phát triển bởi adt bundle, android 4.2 sử dụng minimum sdk 11 and target sdk 21.
Kết quả khi chạy ứng dụng:
  
Ví dụ: Trong ví dụ này chúng ta sẽ làm ứng dụng gồm có một ListView để hiển thị tên các nước cùng với lá cờ nước đó. Tiến hành tạo project, vào thư mục  res /layout -> activity_main.xml thiết kế giao diện sau:
  
Bước 1: Tạo một project tên là ListViewBaseAdapter: File->New->Android Application Project điền các thông tin ->Next ->Finish
Bước 2: Mở res -> layout -> xml (hoặc) activity_main.xml và thêm code trong Linear Layout.
  <?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>    Bước 3: Tạo mới một Activity activity_listview.xml vào trong thư mục layout và thêm code sau:
  <?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>    Bước 4: Tạo mới một lớp CustomAdapter.java bên trong package và thêm code sau:
  package hiepsiit.com.listviewbaseadapter;    import android.content.Context;  import android.view.LayoutInflater;  import android.view.View;  import android.view.ViewGroup;  import android.widget.BaseAdapter;  import android.widget.FrameLayout;  import android.widget.ImageView;  import android.widget.TextView;    public class CustomBaseAdapter  extends BaseAdapter{  	 Context context;  	 String countryList[];  	 int flags[];  	 LayoutInflater inflter;  	public CustomBaseAdapter(Context context, String[] countryList, int[] flags) {  		super();  		this.context = context;  		this.countryList = countryList;  		this.flags = flags;  		inflter	= (LayoutInflater.from(context));  	}    	@Override  	public int getCount() {  		// TODO Auto-generated method stub  		return countryList.length;  	}    	@Override  	public Object getItem(int arg0) {  		// TODO Auto-generated method stub  		return null;  	}    	@Override  	public long getItemId(int position) {  		// TODO Auto-generated method stub  		return 0;  	}    	@Override  	public View getView(int position, View convertView, ViewGroup parent) {  		// TODO Auto-generated method stub  		convertView	=	inflter.inflate(R.layout.activity_listview, null);  		TextView country = (TextView) convertView.findViewById(R.id.textView);          ImageView icon = (ImageView) convertView.findViewById(R.id.icon);          country.setText(countryList[position]);          icon.setImageResource(flags[position]);  		return convertView;  	}	  }       Bước 5: Open   src -> package -> MainActivity.java
  Trong bước này chúng ta khởi tạo ListView. Tiếp theo, chúng ta tạo 1 mảng cho image, 1 mảng cho tên image. Lưu các hình ảnh vào thư mục drawable
  package hiepsiit.com.listviewbaseadapter;    import android.app.Activity;  import android.os.Bundle;  import android.view.Menu;  import android.view.MenuItem;  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);  		CustomBaseAdapter adapter	= 	new CustomBaseAdapter(this, countryList, flags);  		simpleList.setAdapter(adapter);  	}    	@Override  	public boolean onCreateOptionsMenu(Menu menu) {  		// Inflate the menu; this adds items to the action bar if it is present.  		getMenuInflater().inflate(R.menu.main, menu);  		return true;  	}    	@Override  	public boolean onOptionsItemSelected(MenuItem item) {  		// Handle action bar item clicks here. The action bar will  		// automatically handle clicks on the Home/Up button, so long  		// as you specify a parent activity in AndroidManifest.xml.  		int id = item.getItemId();  		if (id == R.id.action_settings) {  			return true;  		}  		return super.onOptionsItemSelected(item);  	}  }      Ứng dụng này được phát triển bởi adt bundle, android 4.2 sử dụng minimum sdk 11 and target sdk 21.
Kết quả khi chạy ứng dụng:
  
Cập nhật công nghệ từ Youtube tại link: https://www.youtube.com/channel/UCOxeYcvZPGf-mGLYSl_1LuA/videos
Để tham gia khóa học công nghệ truy cập link: http://thuvien.hocviendaotao.com
Mọi hỗ trợ về công nghệ email: dinhanhtuan68@gmail.com