fin*_*oop 4 checkbox android android-cursoradapter
我有一个应用程序,使用我自定义的CursorAdapter显示ListView.在我的自定义CursorAdapter.bindView中,我有一个CheckBox对象,我设置了检查值(基于光标上的列)并设置了clickListener.这是我的代码:
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();
}
});
Run Code Online (Sandbox Code Playgroud)
唯一的问题是,当Android回收我的视图时,onCheckedChangeListener仍处于活动状态,因此对setChecked()的调用会导致侦听器中的代码运行.我想知道如何在我包含运行的代码之前无效地使用onCheckedChangedListener.
mcheckBox.setOnCheckedChangeListener(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();
}
});
Run Code Online (Sandbox Code Playgroud)
您可以对上面的代码进行很多优化。我只是说明了基本逻辑。