Android列表数据动态改变
2015-08-14 08:58
579 查看
自己的项目当中遇到了这样一个问题,列表是动态加载的,而且listview的每个item上有动态生成的按钮,当点击按钮后会进行一系列操作,然后改变当前当前列表而不跳转,具体情况如下:
我这里获取到了一个设备列表:
设备列表中的每一项都有一个“修正”按钮,当点击修正以后,问题列表中的问题会自动减少一些,而页面不跳转。
之前我的设计方案是,修正后,跳转到当前页面,并传递所需要的参数,代码如下:
其实这样做不是不可以,但是用户体验就比较差了,应该明显有一个页面跳转的动作在里面,一下子就看出来了,而且如果传递的参数较多,页面的OnCreate方法中做的事情过多就会进一步延迟速度,破坏用户体验,因此应该寻找更好的替代方案。
ListView的显示一般都是通过Adapter来加载数据的,那么Adapter就天然的为我们提供了一个好的方法,就是notifyDataSetChanged(),只要在数据发生改变后,主动调用该方法那么就可以实现当前页面数据的改变而不用调整页面,这个效果有点类似Web开发中的AJAX技术的感觉,满满的AJAX即视感啊,代码如下:
这样就可以了。
我这里获取到了一个设备列表:
设备列表中的每一项都有一个“修正”按钮,当点击修正以后,问题列表中的问题会自动减少一些,而页面不跳转。
之前我的设计方案是,修正后,跳转到当前页面,并传递所需要的参数,代码如下:
@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即视感啊,代码如下:
@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(); <span style="background-color: rgb(255, 255, 51);"&g 4000 t;data.remove(p);</span> // 数据改变 <span style="background-color: rgb(255, 255, 51);">notifyDataSetChanged();</span> // 通知数据已经改变 } }); return convertView; }
@Override public void notifyDataSetChanged() { // TODO Auto-generated method stub super.notifyDataSetChanged(); }
这样就可以了。
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- 使用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 绘图方法