2

我有一个显示复选框列表的对话框。我想在每次显示对话框时设置不同的框。但这仅在第一次有效..我希望每次显示对话框时都能正常工作!如果有人可以提供帮助,那就太好了...

这是我的代码:

@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();
}
4

2 回答 2

3

通过创建的托管对话框onCreateDialog()被缓存。您将需要覆盖onPrepareDialog(),以便在下次显示对话框时获得控制权。你被传递了Dialog对象。将其转换为AlertDialog、 callgetListView()和 usesetItemChecked()来打开或关闭每个复选框。

于 2010-10-30T19:13:07.380 回答
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);
}
于 2010-10-30T19:42:47.463 回答