Android UI之Adapter
2015-08-23 20:59
465 查看
一.什么是适配器,适配器有什么用?
1、描述:适配器是视图与数据之间的桥梁,用来处理数据并将数据绑定到视图上。
2、官方:适配器是AdapterView视图(如ListView、Gallery、GridView、Spinner、AutoCompleteTextView 、ExpandableListView 等)与数据之间的桥梁,用来处理数据并将数据绑定到AdapterView上。android提供多种适配器,开发时可以针对数据源的不同采用最方便的适配器,也可以自定义适配器完成复杂功能。
![](https://img-blog.csdn.net/20150823204003516)
二、适配器Adapter介绍
1、AdapterView对象有两个主要任务:
①在布局中显示数据
②处理用户的选择
2、主要Adapter介绍
![](https://img-blog.csdn.net/20150902205423164)
①BaseAdapter是一个抽象类,通常自定义adapter继承于它,就具有较高的灵活性;
②ArrayAdapter支持泛型操作,最为简单,只能展示一行字。
③SimpleAdapter有最好的扩充性,可以自定义出各种效果。
④SimpleCursorAdapter可以适用于简单的纯文字型ListView,它需要Cursor的字段和UI的id对应起来。如需要实现更复杂的UI也可以重写其他方法。可以认为是SimpleAdapter对数据库的简单结合,可以方便地把数据库的内容以列表的形式展示出来。
⑤BaseExpandableListAdapter可扩展的适配器基类可用于将数据绑定到支持展开/收缩功能的列表控件ExpandableListView上,继承自ListView。
二、最佳Adapter写法介绍(以实现listview为例)
1、描述:适配器是视图与数据之间的桥梁,用来处理数据并将数据绑定到视图上。
2、官方:适配器是AdapterView视图(如ListView、Gallery、GridView、Spinner、AutoCompleteTextView 、ExpandableListView 等)与数据之间的桥梁,用来处理数据并将数据绑定到AdapterView上。android提供多种适配器,开发时可以针对数据源的不同采用最方便的适配器,也可以自定义适配器完成复杂功能。
二、适配器Adapter介绍
1、AdapterView对象有两个主要任务:
①在布局中显示数据
②处理用户的选择
2、主要Adapter介绍
①BaseAdapter是一个抽象类,通常自定义adapter继承于它,就具有较高的灵活性;
②ArrayAdapter支持泛型操作,最为简单,只能展示一行字。
③SimpleAdapter有最好的扩充性,可以自定义出各种效果。
④SimpleCursorAdapter可以适用于简单的纯文字型ListView,它需要Cursor的字段和UI的id对应起来。如需要实现更复杂的UI也可以重写其他方法。可以认为是SimpleAdapter对数据库的简单结合,可以方便地把数据库的内容以列表的形式展示出来。
⑤BaseExpandableListAdapter可扩展的适配器基类可用于将数据绑定到支持展开/收缩功能的列表控件ExpandableListView上,继承自ListView。
二、最佳Adapter写法介绍(以实现listview为例)
package com.example.guan.listview; import android.content.Context; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.BaseAdapter; import android.widget.CheckBox; import android.widget.ImageView; import android.widget.RelativeLayout; import android.widget.TextView; import com.example.guan.uiwork.R; import java.util.List; import java.util.Map; import butterknife.ButterKnife; import butterknife.InjectView; /** * @author Guan * @file com.example.guan.adapter * @date 2015/8/14 * @Version 1.0 */ public class ListViewAdapter extends BaseAdapter { private Context mContext; private List<Map<String, String>> mList; public ListViewAdapter(Context context, List<Map<String, String>> list) { this.mContext = context; this.mList = list; } @Override public int getCount() { return mList.size(); } @Override public Object getItem(int position) { return position; } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { // 2、使用了ViewHolder作为子布局的缓存,使用View的setTag方法将缓存与每个item绑定, // 则也可以省去了findViewById的事件 ViewHolder holder; if (convertView != null) { // 3、获取ViewHolder holder = (ViewHolder) convertView.getTag(); } else { convertView = LayoutInflater.from(mContext).inflate(R.layout.item_listview, null); holder = new ViewHolder(convertView); convertView.setTag(holder); } // 4、绑定数据到holder. holder.tvIds.setText(mList.get(position).get("id")); holder.tvNames.setText(mList.get(position).get("name")); holder.tvAges.setText(mList.get(position).get("age")); return convertView; } /** * 1、将ViewHolder设置为static的目的是指在初始化Adapter时初始化一次这个内部类, * 否则将会在每次创建Adapter时都要初始化一次,而这是没有必要的。 */ static class ViewHolder { @InjectView(R.id.tv_ids) TextView tvIds; @InjectView(R.id.tv_names) TextView tvNames; @InjectView(R.id.tv_ages) TextView tvAges; ViewHolder(View view) { ButterKnife.inject(this, view); } } }
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories