我正在关注以下问题。 我有一个带有setMultipleChoiceItems的警告对话框,创建了对话框 并正确显示但当我尝试取消选中任何一个时 物品,物品保持检查。 以下是代码片段:
SimpleCursorAdapter adapter = new SimpleCursorAdapter(context,
android.R.id.text1,
c,
new String[] {label},
new int[] {android.R.id.text1}
);
AlertDialog dialog=new AlertDialog.Builder(context)
.setTitle(title)
.setPositiveButton(R.string.okBtn, null)
.setNegativeButton(R.string.cancelBtn, null)
.setMultiChoiceItems(c,state,label,
new DialogInterface.OnMultiChoiceClickListener() {
public void onClick(DialogInterface dialog, int which,
boolean isChecked) {
Log.v("TEST", "onClick(..) called with value " + which +
" / "+ isChecked);
}
})
.create();
dialog.show()
尽管如此,在日志I中调用了方法OnMultiChoiceClickListener() 可以看到: “onClick(..)调用值为2 / false” 所以它说选择的项目应该是FALSE(未选中)但是 对话框未更新,项目保持选中状态。 任何想法为什么会这样?
答案 0 :(得分:0)
因此:http://code.google.com/p/android/issues/detail?id=2998
至少据我所知,您必须在选中/取消选中项目时更新数据库。就个人而言,我不喜欢这个想法,对于多选列表我使用ListArrays而不是游标:
final Cursor mCursor = mDbAdapter.getAllData();
final CharSequence[] names = new CharSequence[mCursor.getCount()];
final boolean[] selected = new boolean[mCursor.getCount()];
mCursor.moveToFirst();
while (!mCursor.isAfterLast()) {
names[it] = mCursor.getString(0);
selected[it] = mCursor.getString(1);
mCursor.moveToNext();
}
mCursor.close();
mBuilder.setMultiChoiceItems(names, selected, new DialogInterface.OnMultiChoiceClickListener() {
public void onClick(DialogInterface dialog, int which, boolean isChecked) {
Toast.makeText(getApplicationContext(), names[which] + ": " + ((isChecked) ? "on" : "off"), Toast.LENGTH_SHORT).show();
}
});
这不是最好的方法,但我不知道更好。