listview复用导致内容错乱的问题

例如,当item中有checkbox或button等其他控件,当我们选中某个item的控件,其他item的控件也可能被选中,因为其他item的控件,实际上还是之前item的控件,解决办法如下:

1、在adapter对应的bean中设置boolean值来记录每个item的控件是否被选中,如checkbox是否处于勾选状态,每次改变checkbox时都改变对应bean对象的boolean值,然后再来设置checkbox的状态,eg:

bean类(部分属性):

private boolean isChecked;

public boolean isChecked() {
return isChecked;
}

public void setChecked(boolean isChecked) {
this.isChecked = isChecked;
}


然后在adapter中:

final CheckBox cb = holder.getView(R.id.cb_title);
cb.setChecked(bean.isChecked());

cb.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View arg0) {
t.setChecked(cb.isChecked());
}
});

2、创建一个list,记录每个item中的控件是否处于选中状态,是,则将相应item的position添加进list,否,则将相应item的position移出list,最后根据list是否包含控件所处item的position来设置控件的状态(晕)。eg:

private List<Integer> mPos = new ArrayList<Integer>();


adapter中:

final CheckBox cb = holder.getView(R.id.cb_title);

cb.setChecked(false);//先将checkbox设为false,没被勾选
if(mPos.contains(holder.getPosition())){//如果list中含相应position,则将checkbox勾选
cb.setChecked(true);
}

cb.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View arg0) {
if(cb.isChecked()){//如果checkbox被勾选了,则将相应的position加入list
mPos.add(holder.getPosition());
}
else{ //如果checkbox没被勾选,则将相应的position移出list
mPos.remove((Integer)holder.getPosition());//注意:remove有两种,一种是按位置移除,另一种是按对象移除,我们需要的是按对象移出,所以将position转化为Integer对象
}
}
});



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值