Android列表动态绑定按钮点击事件
来源:互联网 发布:淘宝客服是干嘛的? 编辑:程序博客网 时间:2024/05/26 09:53
在自己接的项目中用到了一个功能,需要在Android的列表中绑定按钮,并且每个按钮根据每个item传递不同的参数。
ListView展现数据都是通过绑定一个Adapter来实现的,但是一般情况下,ListView中的点击事件都是固定的,最多是根据Item的position来确定是点击响应哪个事件,传递哪个参数。
之前代码是这样的
@Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder = new ViewHolder(); if(convertView==null) { holder = new ViewHolder(); convertView = layoutInflater.inflate(R.layout.problem_checklist_item, null); holder.position1 = (TextView) convertView.findViewById(R.id.position1); holder.position2 = (TextView) convertView.findViewById(R.id.position2); holder.standardName = (TextView) convertView.findViewById(R.id.checkstandard); holder.modifyBtn = (Button) convertView.findViewById(R.id.modify_btn); HashMap<String,Object> map = data.get(position); final String id = (String)map.get("id"); holder.modifyBtn.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { // 修改检查结果 System.out.println("id--------------------->"+id); RealCheckDBManager manager = new RealCheckDBManager(context); String code = manager.getResultCode("优"); String deptId = manager.getDeptId(id); String checkDate = manager.getCheckDate(id); String checkNum = manager.getCheckNum(id); manager.setDetailScore("", code, id); String goodcode = manager.getResultCode("优"); String checkId = manager.getCheckId(id); // 遍历Z_CHECK_SCORE_DETAIL表,查看是否都为OK,若是,这把Z_CHECK_SCORE的相应字段也置为OK ArrayList<CheckScoreDetailInfo> detailList = manager.getCheckDetailList(checkId); boolean isOk = true; for(CheckScoreDetailInfo info : detailList) { if(!goodcode.equals(info.getCheckResult())) { isOk = false; break; } } if(isOk) { manager.setScore("", goodcode, checkId); } Toast.makeText(context, "修改成功!", Toast.LENGTH_LONG).show(); Intent intent = new Intent(context,RealCheckListActivity.class); // 根据ID获取Z_CHECK_SCORE表的信息 intent.putExtra("deptId", deptId); intent.putExtra("checkDate", checkDate); intent.putExtra("checkNum", checkNum); context.startActivity(intent); RealCheckProblemListActivity activity = (RealCheckProblemListActivity)context; activity.finish(); } }); convertView.setTag(holder); }else { holder = (ViewHolder)convertView.getTag(); } System.out.println("position----------------->"+position); holder.position1.setText((String)data.get(position).get("dept1")); holder.position2.setText((String)data.get(position).get("dept2")); holder.standardName.setText((String)data.get(position).get("checkStandard")); return convertView; }
这样会带来一个问题,就是每次的id取值都不对,也就是每次点击button的时候,通过intent传递过去的参数都有问题,原因adapter的getview()方法,因为并不能确定什么时候会调用getView(),解决方法就是把对modifyBtn的绑定事件挪出来,放到convertView的代码段之外:
修改后的代码段
@Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder = new ViewHolder(); if(convertView==null) { holder = new ViewHolder(); convertView = layoutInflater.inflate(R.layout.problem_checklist_item, null); holder.position1 = (TextView) convertView.findViewById(R.id.position1); holder.position2 = (TextView) convertView.findViewById(R.id.position2); holder.standardName = (TextView) convertView.findViewById(R.id.checkstandard); holder.modifyBtn = (Button) convertView.findViewById(R.id.modify_btn); //data.get(position).get(""); convertView.setTag(holder); }else { holder = (ViewHolder)convertView.getTag(); } System.out.println("position----------------->"+position); holder.position1.setText((String)data.get(position).get("dept1")); holder.position2.setText((String)data.get(position).get("dept2")); holder.standardName.setText((String)data.get(position).get("checkStandard")); HashMap<String,Object> map = data.get(position); final String id = (String)map.get("id"); holder.modifyBtn.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { // 修改检查结果 System.out.println("id--------------------->"+id); RealCheckDBManager manager = new RealCheckDBManager(context); String code = manager.getResultCode("优"); String deptId = manager.getDeptId(id); String checkDate = manager.getCheckDate(id); String checkNum = manager.getCheckNum(id); manager.setDetailScore("", code, id); String goodcode = manager.getResultCode("优"); String checkId = manager.getCheckId(id); // 遍历Z_CHECK_SCORE_DETAIL表,查看是否都为OK,若是,这把Z_CHECK_SCORE的相应字段也置为OK ArrayList<CheckScoreDetailInfo> detailList = manager.getCheckDetailList(checkId); boolean isOk = true; for(CheckScoreDetailInfo info : detailList) { if(!goodcode.equals(info.getCheckResult())) { isOk = false; break; } } if(isOk) { manager.setScore("", goodcode, checkId); } Toast.makeText(context, "修改成功!", Toast.LENGTH_LONG).show(); Intent intent = new Intent(context,RealCheckListActivity.class); // 根据ID获取Z_CHECK_SCORE表的信息 intent.putExtra("deptId", deptId); intent.putExtra("checkDate", checkDate); intent.putExtra("checkNum", checkNum); context.startActivity(intent); RealCheckProblemListActivity activity = (RealCheckProblemListActivity)context; activity.finish(); } }); return convertView; }
这里还要注意一个问题,一旦在Item上绑定button的Onclick事件后,原先item的Onclick事件将会无效,因为button的Onclick事件已经将其“消化”。
0 0
- Android列表动态绑定按钮点击事件
- 动态绑定按钮点击事件
- Android按钮点击事件的绑定
- javascript动态生成按钮并绑定点击事件
- 动态绑定按钮事件
- web按钮绑定点击事件
- ios 给不同按钮,动态绑定同一个点击事件,判断当前点击的按钮
- android 动态加载按钮并为按钮设置点击事件
- Android ListView ArrayAdapter同时实现列表和按钮点击事件
- JavaScript:按钮事件动态绑定
- android 按钮点击事件
- Android按钮点击事件
- Android按钮点击事件
- ios 动态添加了按钮,绑定同一个点击事件,如何判断点击的是哪个?
- iOS--- 动态添加了按钮,绑定同一个点击事件,如何判断点击的是哪个?
- ios 动态添加了按钮,绑定同一个点击事件,如何判断点击的是哪个?
- android 点击事件 按钮事件
- js实现快捷键绑定按钮点击事件
- m3u8 indexing file and HLS
- 2015 Multi-University Training Contest 5
- google python class exercise
- for 、foreach和iterator的区别
- install git
- Android列表动态绑定按钮点击事件
- Android 全局TextView设置
- c++中int,string,char类型的相互转换
- CodeIgniter 的文件上传控件解析
- 手势识别器
- Python中的变量
- iOS依赖注入框架系列(一):介绍Typhoon
- transition在xml中的属性
- 内存管理