无法在onPrepareDialog中设置复选框状态

时间:2010-11-06 04:17:04

标签: android checkbox dialog checkboxlist prepare

我有一个显示复选框列表的对话框。每次打开时应检查哪些框的信息来自edittext。我搜索了一种不允许缓存对话框的方法,但却找不到如何做到这一点。现在我重写onPrepareDialog以在对话框打开之前设置复选框。我删除了我的edittext的内容,打开了对话框,但仍然检查了相同的框...有谁能告诉我如何重置复选框?

    @Override
    protected void onPrepareDialog(int id, Dialog dialog) {
        ListView lv = ((AlertDialog) dialog).getListView();

        if (lv == null)
            return;

        boolean[] checked = cbDialog.setAndGetCheckedArray();

        String s = "onPrepareDialog... checked=";
        for (int i=0; i<checked.length; i++)
            s+="["+i+"="+checked[i]+"]";
        System.out.println(s);

            // if edittext is empty, all entries in checked[] are false here,
            // but these changes do NOT affect the checkboxes in the dialog:
        for (int i=0; i<checked.length; i++)
            if (checked[i])
                lv.setItemChecked(i, true);
            else 
                lv.setItemChecked(i, false);
    }

2 个答案:

答案 0 :(得分:1)

好吧,我终于找到了如何解决这个问题,也许它可以帮助任何人:

我发现(由于内部缓存机制),如果动态修改对话框的内容,最好不要在活动中调用showDialog()并使用onCreateDialog()创建对话框。

相反,我创建了一个扩展AlertDialog.Builder的类。我实现了一个像“showCustomDialog()”这样的方法,我调用.setTitle ...,。setMultiChoiceItems(),最后是show()。我的自定义AlertDialog.Builder的这个方法我可以在我的活动中使用,一切都按预期工作;)

答案 1 :(得分:1)

似乎普遍认为,如果需要针对不同的实例更改内容,则应避免使用托管对话框('showDialog','onCreateDialog'等)。特别是,API Level 1.8之前或之后的'onPrepareDialog'没有任何用处。

另一个例子是:Question 954726