我有一个显示复选框列表的对话框。我想在每次显示对话框时设置不同的框。但这只是第一次工作..我希望每次显示对话框时都能正常工作!如果有人能帮忙的话会很棒......
这是我的代码:
@Override
protected Dialog onCreateDialog(int id) {
switch (id) {
case CHECKBOX_LIST_DIALOG:
final CharSequence[] weeks = new CharSequence[53];
for (int i=0; i<=52; i++) {
weeks[i] = String.valueOf(i+1);
}
return new AlertDialog.Builder(this).setTitle(
R.string.txt_week_checkbox_list).setMultiChoiceItems(
weeks, getCheckedBoxes(),
new DialogInterface.OnMultiChoiceClickListener() {
public void onClick(DialogInterface dialog, int whichButton, boolean isChecked) {
checked[whichButton] = isChecked;
}
}).setPositiveButton("OK",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
EditText editText = (EditText) findViewById(R.id.edittext_weeks);
editText.setText(generateString());
}
}).setNegativeButton("Cancel",
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int whichButton) {
}
}).create();
}
答案 0 :(得分:3)
通过onCreateDialog()
创建的托管对话框被缓存。您需要覆盖onPrepareDialog()
,以便在下次显示对话框时获得控制权。您将被传递Dialog
对象。将其投放到AlertDialog
,致电getListView()
,然后使用setItemChecked()
打开或关闭每个复选框。
答案 1 :(得分:0)
大!这样做了,谢谢!!这正是我一直在寻找的:-) 这就是我所做的让它像你解释的那样工作:
@Override
protected void onPrepareDialog(int id, Dialog dialog) {
ListView lv = ((AlertDialog) dialog).getListView();
boolean[] checked = myDialog.getCheckedBoxes();
for (int i=0; i<checked.length; i++)
if (checked[i])
lv.setItemChecked(i, true);
}