android中Adapter适配器说明

来源:互联网 发布:unity3d游戏开发基础 编辑:程序博客网 时间:2024/05/16 05:01

因为项目的需要,需要使用ListView加载自定义的布局,因此自己定义Adapter继承BaseAdapter,在Adapter之中做了View的响应处理操作,并且能够将Adapter之中相关的View的概况通过Handler发送给Activity实现消息通信。


整个实现的预览图如图所示:ps这里是模拟车辆状态的一些说明

主要实现的一些功能:

1/ 统计开启功能个数,使用Handler

2/ 一键开启/关闭所有功能

3/ 每一个View实现响应功能:view左侧区域弹出关于此功能介绍,view右侧区域实现开启/关闭该功能



以下是代码说明:

DriveinfoAdapter:继承自BaseAdapter

构造函数:

public DriveinfoAdapter(Context mContext, ArrayList<String> mList, Handler mhandler)

mContext::实现Activity对象对应Context的一系列引用

mList:实现每个View加载的文字说明

mhandler:建立Handler-Message之间的信息通信


关键说明:

1/  SparseBooleanArray:用来记录每个View中开启/关闭状态,亦可以使用HashMap<Integer,Boolean>,不过推荐使用SparseBooleanArray,比HashMap要高效,至于怎么高效,后面的文章会有所说明

// 在构造函数中,全部将其状态置为false,进行初始化for (int i = 0; i < list.size(); i++) {// isSelected.put(i, false);sba.put(i, false);}

        public static SparseBooleanArray getSba() {return sba;}public static void setSba(SparseBooleanArray sba) {DriveinfoAdapter.sba = sba;}

2/  ViewHolder:创建该类主要是为了优化ListView,使得View刷新过程中能够充分加载缓存的View,进而使得View的加载刷新效果提升

public class ViewHolder {/**行车功能的各项图标*/private ImageView drive_func_image;/**行车功能的名称*/private TextView function_menu;/**左侧布局,设置监听事件实现弹出对话框对行车功能进行解释说明*/private LinearLayout left_note;/**右侧布局,点击监听事件实现开关的开启关闭*/private LinearLayout right_toggle;/**右侧开关,显示当前功能项的开启或者关闭状态*/private ToggleButton right_turn;/**文字显示功能项的开启或者关闭:“已开启”或者“已关闭”*/private TextView function_state;}

3/  Handler:先进行Message的参数配置,message.arg1为统计开启功能个数,其值为funcOpenCount()返回值,message.obj为开启/关闭每个功能发送的字符串

public void Message(String send) {Message message = new Message();message.what = 1;message.arg1 = funcOpenCount();message.obj = send;handler.sendMessage(message);}

/** * 记录开启的功能个数 * @return */public int funcOpenCount() {int count = 0;// 将Map中的数据,全部将其状态置为falsefor (int i = 0; i < list.size(); i++) {// if(isSelected.get(i))// {// count++;// }if (sba.get(i)) {count++;}}return count;}



CmDriveinfoActivity:继承Activity类,加载主体布局文件


关键部分

Handler消息接受与处理操作

//实例化Handler对象,实现adapter和activity的消息传递。HandleMessage对msg进行判断解析,得到信息Handler mHandler = new Handler() {@Overridepublic void handleMessage(Message msg) {super.handleMessage(msg);switch (msg.what) {case 1://设置已开启功能的个数note.setText("已开启 "+msg.arg1+ "个功能");//获取待获取的指令信息String ss = (String) msg.obj;if (D)Log.d(TAG + ":handler ->ss", ss);break;default:break;}}};


主要布局文件说明:

cm_driveinfo.xml:Activity加载的布局文件
cm_driveinfo_dialog:ListView点击左侧View区域弹出关于该功能介绍的布局文件
cm_driveinfo_listview:ListView中每一项View的布局文件
cm_driveinfo_menu_dialog:全部开启/禁止,右上角menu按钮触发

详细代码参考~:
http://download.csdn.net/detail/u010881221/9642534
0 0
原创粉丝点击