holder.cb.setId(postion);
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
//如何获取该CheckBox所在的list item的索引,以便更新mList对应的数据;
int index = buttonView.getId();
mList.get(index);
}
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
//如何获取该CheckBox所在的list item的索引,以便更新mList对应的数据;
int index = buttonView.getId();
mList.get(index);
}
解决方案 »
- 【开发分享】如何提高移动应用的活跃度
- 类似于ExpandableListActivity的三级联动,怎么做呢,有没有什么好的建议
- activity跳转后关闭调用它的activity
- 想学习Android,请教有什么菜鸟看的基础入门的书或资料
- 问题: 关于android Application
- andriod 和 android 的区别
- android用shape给linearLayout设置边框,怎样只保留底部或顶部的边框,把其它三个方向的边框去掉呢?
- Google Maps Android API v2 中给地图增加自定义层
- android中listview的item有checkbox
- 手机上显示的样式变了
- 有没有用Google手机的啊?
- 求助:Android开发环境的配置问题
要么拿一个专门的list或者数组来存放,要么就直接在adapter关联的list的数据结构中加上isChecked这一项
,而且传进来的参数还是相反的。值得注意的是,是在消失的时候调用的,还没有再次显示,应该跟GetView无关吧
那么你在getview加一个判断
if(isChecked)
{
checkBox.setChecked(true);
}else{
checkBox.setChecked(false);
}
这时问题就出现了,假设第一个list item的CheckBox是false, 而第六个是true. 在显示第六个的时候就会执行getView中的holder.cb.setChecked(mChecked); (此时mChecked为true)。 别忘了这时使用的是第一个list item的convertView, 所以就触发了第一个的OnCheckedChangeListener()方法,强制将第一个设成了true这是我的理解,但我还没找到什么好的方法
int resource = R.layout.item;//每个item布局
LayoutInflater li = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
for(int i=0;i<6;i++){
LinearLayout item = new LinearLayout(this);
li.inflate(resource, item , true);
CheckBox cb = (CheckBox)item.findViewById(R.id.cb);
cb.setOnCheckedChangeListener(cbOnChange);
items.add(item);
}
holder.cb.setChecked(mChecked) 应该放到holder.cb.setId(postion) 的后面,
再次感谢各位,尤其是AspireHouse同学:)