设置复选框列表对话框的复选框

时间:2010-10-30 18:13:17

标签: android dialog checkbox checkboxlist

我有一个显示复选框列表的对话框。我想在每次显示对话框时设置不同的框。但这只是第一次工作..我希望每次显示对话框时都能正常工作!如果有人能帮忙的话会很棒......

这是我的代码:

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

2 个答案:

答案 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);
}