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


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

主要实现的一些功能:

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

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

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

android适配器 android适配器怎么用_Adapter


以下是代码说明:

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中的数据,全部将其状态置为false
		for (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() {
			@Override
			public 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按钮触发



详细代码参考~: