Android列表数据动态改变
来源:互联网 发布:java大量线程wait状态 编辑:程序博客网 时间:2024/06/03 23:46
自己的项目当中遇到了这样一个问题,列表是动态加载的,而且listview的每个item上有动态生成的按钮,当点击按钮后会进行一系列操作,然后改变当前当前列表而不跳转,具体情况如下:
我这里获取到了一个设备列表:
设备列表中的每一项都有一个“修正”按钮,当点击修正以后,问题列表中的问题会自动减少一些,而页面不跳转。
之前我的设计方案是,修正后,跳转到当前页面,并传递所需要的参数,代码如下:
@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 int p = position; //data.remove(position); final String id = (String)map.get("id"); final String equipId = (String)map.get("equipId"); final String equipNo = (String)map.get("equipNo"); 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 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,RealCheckProblemListActivity.class); // 根据ID获取Z_CHECK_SCORE表的信息 intent.putExtra("deptId", deptId); intent.putExtra("checkDate", checkDate); intent.putExtra("checkNum", checkNum); intent.putExtra("id", checkId); intent.putExtra("equipId", equipId); intent.putExtra("equipNo", equipNo); context.startActivity(intent); RealCheckProblemListActivity activity = (RealCheckProblemListActivity)context; activity.finish(); } }); return convertView; }
其实这样做不是不可以,但是用户体验就比较差了,应该明显有一个页面跳转的动作在里面,一下子就看出来了,而且如果传递的参数较多,页面的OnCreate方法中做的事情过多就会进一步延迟速度,破坏用户体验,因此应该寻找更好的替代方案。
ListView的显示一般都是通过Adapter来加载数据的,那么Adapter就天然的为我们提供了一个好的方法,就是notifyDataSetChanged(),只要在数据发生改变后,主动调用该方法那么就可以实现当前页面数据的改变而不用调整页面,这个效果有点类似Web开发中的AJAX技术的感觉,满满的AJAX即视感啊,代码如下:
@Overridepublic 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 int p = position;//data.remove(position);final String id = (String)map.get("id");final String equipId = (String)map.get("equipId");final String equipNo = (String)map.get("equipNo");holder.modifyBtn.setOnClickListener(new OnClickListener() {@Overridepublic 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的相应字段也置为OKdetailList = 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();<span style="background-color: rgb(255, 255, 51);">data.remove(p);</span> // 数据改变<span style="background-color: rgb(255, 255, 51);">notifyDataSetChanged();</span> // 通知数据已经改变}});return convertView;}
@Overridepublic void notifyDataSetChanged() {// TODO Auto-generated method stubsuper.notifyDataSetChanged();}
这样就可以了。
0 0
- Android列表数据动态改变
- 根据数据动态改变Android列表背景颜色
- 根据数据动态改变Android列表背景颜色
- DataBinding动态改变数据
- 修改Android中strings.xml文件, 动态改变数据
- 修改Android中strings.xml文件, 动态改变数据
- 修改Android中strings.xml文件, 动态改变数据
- 修改Android中strings.xml文件, 动态改变数据
- Android中string.xml,动态改变数据方法
- Android 根据Edittext内容动态改变Listview显示的数据
- Android动态改变布局
- Android动态改变布局
- Android动态改变布局
- Android动态改变布局
- android 动态改变字体大小
- Android动态改变布局
- android动态改变桌面图标
- Android动态改变布局
- 【ecstore】gift控制器
- 九度oj-1200-最大的两个数
- python如何生成重复单一值的序列
- RAM、ROM和磁盘
- mybatis sql语句返回值问题
- Android列表数据动态改变
- Codeforces 570C Replacement 暴力
- hdoj 5092 Seam Carving 【树塔DP变形 + 路径输出】 【简单题】
- LeetCode-42 Trapping Rain Water
- Android之Handler用法总结
- hdu 1863 畅通工程
- js坑爹笔试题目汇总(持续更新中)
- String,StringBuffer,StringBuilder区别总结
- UF超滤膜:中空纤维超滤膜在餐饮行业中应用研发