我有一个包含复选框和文本视图的列表视图,并且我在我的适配器中添加了一个 ViewBinder,在这个视图绑定器中,我向我的复选框添加了一个 onchecked 状态侦听器,并且在 onchecked 状态侦听器中我编写了以下代码:
OnCheckedChangeListener myCheckChangList = new OnCheckedChangeListener() {
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
String id=buttonView.getTag()+"";
int buttonid=Integer.valueOf(id);
if(buttonView.isChecked()==true){
Log.d("checked","checked");
myDbHelper.MarkAsFavorite(buttonid);
}
else if(buttonView.isChecked()==false){
Log.d("unchecked","unchecked");
myDbHelper.UnMarkAsFavorite(buttonid);
}
cu=myDbHelper.GetCursor();
adapter.swapCursor(cu);
}
};
但是使用此代码,当我的复选框被选中时,它被保存在数据库中,然后当我滚动浏览列表视图时,它本身被取消选中,它访问未选中的代码并取消选中复选框并将其保存在数据库中。
所以我通过在复选框中添加一个 onclick 侦听器而不是 onchange 状态侦听器来修复它:
public void onclick(View view) {
String id=view.getTag()+"";
int buttonid=Integer.valueOf(id);
if(((CompoundButton) view).isChecked()==true){
Log.d("checked","checked");
myDbHelper.MarkAsFavorite(buttonid);
}
else if(((CompoundButton) view).isChecked()==false){
Log.d("unchecked","unchecked");
myDbHelper.UnMarkAsFavorite(buttonid);
}
cu=myDbHelper.GetCursor();
adapter.swapCursor(cu);
}
我没有更多的问题。但我想知道为什么这个变化状态监听器会这样?