关于Android中listView列表checkBox乱序的问题,求解答!!!

这几天一直都困扰着这个问题,晚上也搜寻了很多资料,就不明白为什么listview+checkBox超过一屏时数据就乱序了,网上说是新显示的View使用了之前某个View的... 这几天一直都困扰着这个问题,晚上也搜寻了很多资料,就不明白为什么listview+checkBox超过一屏时数据就乱序了,网上说是新显示的View使用了之前某个View的对象。由于自己是新手,还是不能够理解,

好想说是当选择了checkbox的时候,记录下当前的状态,然后在getView()中设置,可具体怎么修改,
请各位大哥指点一下迷津,帮忙修改一下,感激不尽
自定义的适配器:
@Override
public View getView(final int position, View convertView, ViewGroup parent) {

final int index = position;
viewHolder holder = null;
Log.v("", "getview position=" + position);

if (convertView == null) {
holder = new viewHolder();
// 2、加载布局的加载器
convertView = layoutInflater.inflate(layoutId, null);
// 加载布局
holder.im = (ImageView) convertView.findViewById(R.id.imag1);
holder.bookNameTv = (TextView) convertView
.findViewById(R.id.bookName);
holder.authorTv = (TextView) convertView.findViewById(R.id.author);
holder.cb = (CheckBox) convertView.findViewById(R.id.check);
convertView.setTag(holder);
} else {
holder = (viewHolder) convertView.getTag();
}
}
展开
 我来答
百度网友9bd8d02
2014-04-11 · 超过28用户采纳过TA的回答
知道答主
回答量:73
采纳率:100%
帮助的人:39.6万
展开全部
这是item布局重用导致的。你可以在ViewHolder中声明一个int类型的ID,并写一个有参构造。每次new的时候传入 position;
再写一个全局的List集合,只要选中CheckBox就将这个Id加到这个list中,反之则从list中remove掉。这样在getView()方法中只要是position存在list中则把CheckBox的属性设为true反之为false.这样就不会混乱了。这个和图文混排时的错乱是一样的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
_前__
2014-04-11
知道答主
回答量:6
采纳率:0%
帮助的人:5.2万
展开全部
在你的实体类中加一个标志位。判断checkbox是否点击了.viewholder的重用,将导致后面重用的view没有正确的position,所以会出现错乱。如果没懂。你可以附上更多的代码(实体类和你的adapter,以及你的xml布局)。我可以帮你修改。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式