Android复选框-删除以前的设置CheckedChangeListener
我有一个应用程序,它使用我定制的游标适配器显示ListView。在自定义CursorAdapter.bindView中,我有一个复选框对象,用于设置选中值(基于光标上的列)并设置clickListener。这是我的密码:Android复选框-删除以前的设置CheckedChangeListener,android,checkbox,android-cursoradapter,Android,Checkbox,Android Cursoradapter,我有一个应用程序,它使用我定制的游标适配器显示ListView。在自定义CursorAdapter.bindView中,我有一个复选框对象,用于设置选中值(基于光标上的列)并设置clickListener。这是我的密码: CheckBox mCheckBox = (CheckBox) view.findViewById(R.id.list_done); mCheckBox.setChecked(isDone); mCheckBox.setOnCheckedChangeLi
CheckBox mCheckBox = (CheckBox) view.findViewById(R.id.list_done);
mCheckBox.setChecked(isDone);
mCheckBox.setOnCheckedChangeListener(new OnCheckedChangeListener()
{
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
{
AW.getDB().updateTask(c.getInt(c.getColumnIndex(ToDoDBAdapter.KEY_ID)), isChecked);
TD.displayTasks();
}
});
唯一的问题是,当Android回收我的视图时,onCheckedChangeListener仍然处于活动状态,因此对setChecked()的调用会导致侦听器中的代码运行。我想知道如何在我包含的代码运行之前使onCheckedChangedListener失效。您可以调用
mcheckBox.setoncheckedchangedListener(null)
如果在onCheckedChangeListener
中执行,则需要声明mCheckBox
final
您可以执行以下操作:
// c is the Cursor you are getting
CheckBox mCheckBox = (CheckBox) view.findViewById(R.id.list_done);
mCheckBox.setTag(new Integer(c.getPosition());
mCheckBox.setChecked(isDone);
mCheckBox.setOnCheckedChangeListener(new OnCheckedChangeListener()
{
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked)
{
Integer posInt = (Integer)buttonView.getTag();
int pos = posInt.intValue();
c.moveToPosition(pos);
AW.getDB().updateTask(c.getInt(c.getColumnIndex(ToDoDBAdapter.KEY_ID)), isChecked);
TD.displayTasks();
}
});
您可以对上述代码进行很多优化。我只是举例说明了基本逻辑。最佳答案和+1用于无意中回答我的其他问题: