Android 中listView数据混乱的原因以及解决方法
来源:互联网 发布:win7变色龙引导mac 编辑:程序博客网 时间:2024/05/16 05:08
前几天写代码的时候,在listview 中添加了checkbox,原本觉着逻辑没有任何问题,但测试的时候,发现checkbox的状态是混乱的,
比如我这里选的1、2
等我再传进来的时候变成了
一开始不知道是为什么,后来网上搜索了一大堆之后,发现原来还是逻辑有些问题。
</pre><pre code_snippet_id="589573" snippet_file_name="blog_20150126_1_784121" name="code" class="java">
<span style="font-family: Arial, Helvetica, sans-serif;">@Override</span>
public View getView(int position, View convertView, ViewGroup parent) {// TODO Auto-generated method stubfinal DeviceInfo item = items.get(position);ViewHolder holder=null;if(convertView==null){holder=new ViewHolder();convertView = inflater.inflate(R.layout.lv_item_device, null);holder.tvDeviceType=(TextView)convertView.findViewById(R.id.tv_device_type);holder.tvDeviceNo=(TextView)convertView.findViewById(R.id.tv_device_no);holder.cbIscheck=(CheckBox)convertView.findViewById(R.id.cb_device_ischeck);convertView.setTag(holder);}else{holder=(ViewHolder)convertView.getTag();}holder.tvDeviceType.setText(item.getDeviceCategory()+"");holder.tvDeviceNo.setText(item.getDeviceNum());holder.cbIscheck.setChecked(item.isSelcet());holder.cbIscheck.setOnCheckedChangeListener(new OnCheckedChangeListener() {@Overridepublic void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {// TODO Auto-generated method stubitem.setSelcet(isChecked);}});return convertView;}
先赋值,再设置监听器,就会出现一个问题,比如给第一个赋值了,此时它的item被赋值了,holder 还没有监听器,所以原先list就不会被触发。所以list中的数据就有可能因这段代码没生效:
holder.cbIscheck.setOnCheckedChangeListener(new OnCheckedChangeListener() {@Overridepublic void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {// TODO Auto-generated method stubitem.setSelcet(isChecked);}});
而不一致。
解决的办法很简单,将赋值放在监听器之后
如下:
public View getView(int position, View convertView, ViewGroup parent) {// TODO Auto-generated method stubfinal DeviceInfo item = items.get(position);ViewHolder holder=null;if(convertView==null){holder=new ViewHolder();convertView = inflater.inflate(R.layout.lv_item_device, null);holder.tvDeviceType=(TextView)convertView.findViewById(R.id.tv_device_type);holder.tvDeviceNo=(TextView)convertView.findViewById(R.id.tv_device_no);holder.cbIscheck=(CheckBox)convertView.findViewById(R.id.cb_device_ischeck);convertView.setTag(holder);}else{holder=(ViewHolder)convertView.getTag();}holder.cbIscheck.setOnCheckedChangeListener(new OnCheckedChangeListener() {@Overridepublic void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {// TODO Auto-generated method stubitem.setSelcet(isChecked);}});holder.tvDeviceType.setText(item.getDeviceCategory()+"");holder.tvDeviceNo.setText(item.getDeviceNum());holder.cbIscheck.setChecked(item.isSelcet());return convertView;}
问题就解决了,总而言之,先做监听器,再赋值。
1 0
- Android 中listView数据混乱的原因以及解决方法
- Android中ListView滑动时数据混乱
- Android ListView 数据混乱
- Android ListView滑动混乱解决方法
- Android ListView中的项中包含RadioGroup时,RadioButton混乱选中的问题的解决方法
- Android ListView中使用CheckBox等的混乱问题
- android ListView 中CheckBox选中后,状态混乱的解决方案
- ListView中嵌入一个或多个EditText导致数据混乱解决方法
- android 关于ListView Item数据混乱问题
- android 关于ListView Item数据混乱问题
- Android开发中ListView数据更新显示的解决方法
- android listview中放radiogroup选择混乱
- Android TextView自动换行文字,排版混乱的原因和解决方法
- Android TextView自动换行文字,排版混乱的原因和解决方法
- Android TextView自动换行文字,排版混乱的原因和解决方法
- Android TextView自动换行文字,排版混乱的原因和解决方法
- Android在ListView中嵌套一个GridView时只显示一行的原因及解决方法
- Android在ListView中嵌套一个GridView时只显示一行的原因及解决方法
- Android基于XMPP Smack Openfire下学习开发IM(二)对分组、好友和头像等一些操作
- css相关,鼠标点击<input>输入域后出现有颜色的边框
- Linux动态链接库.so文件的创建与使用
- 在VS2012中可使用的C++11的新特性
- AngularJS开发指南
- Android 中listView数据混乱的原因以及解决方法
- 一个程序员的奋斗历程
- OllyDBG使用基础
- Android基于XMPP Smack Openfire下学习开发IM(三)会议室创建、加入以及查询会议室中所有成员等
- javascript学习之DOM操作
- ecshop后台分页方法(原创可用)
- Linux动态链接库.so文件的创建与使用
- 好像回家,立刻最好
- color 转 image