Android adapter初步介绍

Android adapter 介绍

1.      什么是Adapter

引用google API的话语:

An Adapter objectacts as a bridge between an AdapterView and the underlying data for that view.The Adapter provides access to the data items. The Adapter is also responsiblefor making a View for each item in the data set.

即:Adapter是view和data之间的桥梁


2.      Adapter接口及其衍生类


大部分抽象方法都是Adapter接口提供的,其衍生的2个接口:

(1)    ListAdapter

abstract boolean areAllItemsEnabled()

abstract boolean isEnabled(intposition)

(2)    SpinnerAdapter

abstract View getDropDownView(intposition, View convertView, ViewGroup parent)


3.      BaseAdapter(常用adapter类一)

(1)    BaseAdapter实现了一些不常用的接口,给予默认值

         <1> publicboolean hasStableIds()  组和子元素是否持有稳定的ID,也就是底层数据的改变不会影响到它们(不懂)

         <2> registerDataSetObserver  unregisterDataSetObserver  notifyDataSetChanged notifyDataSetInvalidated  类似与数据改变时通知(具体怎么用)

         <3> boolean areAllItemsEnabled()  是否所有items都是可用的

         <4> boolean isEnabled(intposition)  如果某个item不是separate则返回true

         <5> View getDropDownView(intposition, View convertView, ViewGroup parent) 定义一个试图的下拉子试图(待续)

         <6> intgetViewTypeCount()  同一个listview的view item可能包含多种不同的layout,返回layout的种数

         <7> int getItemViewType(intposition)  返回某一position使用哪种layout, 最终还是要在getView中根据此参数对convertView赋不同的值,所以这2个方法意义不大

         <8> booleanisEmpty()  返回此adapter是否为空 即getCount() == 0

(2)    具体使用示例:

自定义adapter类:

public class CustomAdapter extends BaseAdapter{
	ArrayList<CustomData> mData;
	private LayoutInflater mInflater;
	ImageView mImageView;
	TextView mTextView;
	public CustomAdapter(ArrayList<CustomData> data, Context context) {
		this.mData = data;
		this.mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
	}
	@Override
	public int getCount() {
		//返回adapter总共有多少项数据(可以直接返回0)
		return mData.size();
	}
	@Override
	public Object getItem(int position) {
		//返回adapter 某一项具体的数据(可以直接返回null)
		return mData.get(position);
	}
	@Override
	public long getItemId(int position) {
		/**(可以直接返回0)
		 * position: The position of the view in the adapter.
		 * id:	     The row id of the item that was clicked.
		 * 在大部分adapter中,position == id
		 * 但是在HeaderViewListAdapter中,如果position指向了headerView或footerView,那么返回-1,否则,将返回在用户view数组的位置
		 */
		return position;
	}
	@Override
	public View getView(int position, View convertView, ViewGroup parent) {
		//返回某一位置的具体view
		if(convertView == null) {
			convertView = mInflater.inflate(R.layout.list_view, null);
			mImageView = (ImageView)convertView.findViewById(R.id.imageview);
			mTextView = (TextView)convertView.findViewById(R.id.textivew);
		}
		mImageView.setBackgroundResource(mData.get(position).getImageView());
		mTextView.setText(mData.get(position).getTextView());
		return convertView;
	}
}
主要就是实现getView方法,来返回自定义的view给list item

这儿引用的R.layout.list_view就是一个完整的layout

使用方法:

mCustomAdapter = new CustomAdapter(mData, getApplicationContext());
mListView.setAdapter(mCustomAdapter);
其中mData可以看做是存储数据的集合

4.      SimpleAdapter(常用adapter类二)

(1)    定义了一个简单的adapter,可以使用自定义的xml布局和arraylist参数,构建adapter对象供listview使用.可以传递各种类型的参数

构造方法:

SimpleAdapter(Context context, List<? extends Map<String, ?>> data, int resource, String[] from, int[] to)
其中data是传入的数据,resource是布局,from是取data中的参数的key,to是依次被赋值的对象.

(2)    具体使用示例:

初始化data:

private List<Map<String, Object>> getSimpleData() {
		List<Map<String, Object>> mList = new ArrayList<Map<String,Object>>();
		Map<String, Object> mMap = new HashMap<String, Object>();
		mMap.put("text","This is SimpleAdapter 0");
		mMap.put("image", R.drawable.ic_launcher);
		mList.add(mMap);
		//...... other data
		return mList;
	}
使用方法:

mSimpleAdapter = new SimpleAdapter(getApplicationContext(), getSimpleData(), R.layout.list_view, new String[]{"image", "text"}, new int[]{R.id.imageview, R.id.textivew});
mListView.setAdapter(mSimpleAdapter);

5.      ArrayAdapter(常用adapter类三)

(1)    顾名思义,就是这种adapter只能传递字符串参数,不能传递其他对象参数,使用也较SimpleAdapter简单些

构造方法:

ArrayAdapter(Context context, int textViewResourceId)
ArrayAdapter(Context context, int resource, int textViewResourceId)
ArrayAdapter(Context context, int textViewResourceId, T[] objects)
ArrayAdapter(Context context, int resource, int textViewResourceId, T[] objects)
ArrayAdapter(Context context, int textViewResourceId, List<T> objects)
ArrayAdapter(Context context, int resource, int textViewResourceId, List<T> objects)
textViewResourceId:textview布局的id

objects传入的数据集合

(2)    具体使用示例:

String[] mArrayData = {"test1", "test2", "test3", "test4"};
mArrayAdapter = new ArrayAdapter<String>(getApplicationContext(), R.layout.arraylist_textview, mArrayData);
mListView.setAdapter(mArrayAdapter);
其中arraylist_textview.xml文件并不是一个Layout,而是一个TextView:

ex:

<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
</TextView>

6.      SimpleCursorAdapter(常用adapter类四)

这个和SimpleAdapter有点像,传入的参数最终只能是字符串参数,但是传入的参数并不是一个字符串数组,而是一个Cursor对象,所以当读取数据库数据并显示出来的时候使用这种适配器比较方便.(这个也可以传递其他参数,但是要重载这个类,待续)

构造函数:

SimpleCursorAdapter(Context context, int layout, Cursor c, String[] from, int[] to)
SimpleCursorAdapter(Context context, int layout, Cursor c, String[] from, int[] to, int flags)

使用示例:

Cursor cur = getContentResolver().query( ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
startManagingCursor(cur);
mSimpleCursorAdapter = new SimpleCursorAdapter(this, R.layout.arraylist_textview, cur, new String[] {ContactsContract.Contacts.DISPLAY_NAME}, new int[] {R.id.textivew});
mListView.setAdapter(mSimpleCursorAdapter);

7.    HeaderViewListAdapter(待续)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值