Android adapter初步介绍
2013-05-16 20:32
399 查看
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类:
这儿引用的R.layout.list_view就是一个完整的layout
使用方法:
4. SimpleAdapter(常用adapter类二)
(1) 定义了一个简单的adapter,可以使用自定义的xml布局和arraylist参数,构建adapter对象供listview使用.可以传递各种类型的参数
构造方法:
(2) 具体使用示例:
初始化data:
5. ArrayAdapter(常用adapter类三)
(1) 顾名思义,就是这种adapter只能传递字符串参数,不能传递其他对象参数,使用也较SimpleAdapter简单些
构造方法:
objects传入的数据集合
(2) 具体使用示例:
ex:
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)
使用示例:
7. HeaderViewListAdapter(待续)
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", "test 4000 2", "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(待续)
相关文章推荐
- Android 动画学习(二)之Property Animation初步介绍
- android 中的 adapter介绍
- 十二.Android中Service的初步介绍
- Android布局之ListView初步介绍
- Android ListView和Adapter数据适配器的简单介绍
- Android BaseAdapter介绍和优化
- Android BaseAdapter使用介绍
- android fragmentStateViewPagerAdapter 介绍
- android 蓝牙BluetoothAdapter的介绍
- Android中DRM mobile 1.0的初步介绍
- Android SimpleAdapter应用介绍,代码+解释 ListView使用+滚动监听用scoll
- android HeaderViewListAdapter的介绍
- Android开发视频教程之四(Activity初步介绍)
- android HeaderViewListAdapter的介绍
- Android的Adapter介绍
- Android中Adapter初步的学习
- Android BaseAdapter 和ListAdapter的介绍
- Android Databinding 从入门到转行(一)初步介绍
- Android基础--ViewPager的PagerAdapter的介绍
- Android中的Adapter简单介绍