1

チェックボックスのリストを表示するダイアログがあります。ボックスを開くたびにチェックする必要がある情報は、編集テキストから取得されます。ダイアログのキャッシュを許可しない方法を探しましたが、その方法がわかりませんでした。ここで、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);
    }
4

1 に答える 1

1

さて、私は最終的にこの問題を解決する方法を見つけました。おそらく誰にでも役立つかもしれません:

ダイアログの内容が動的に変更される場合、アクティビティで showDialog() を呼び出さず、 onCreateDialog() を使用してダイアログを作成する方がよい場合があることがわかりました (内部キャッシュ メカニズムのため)。

代わりに、AlertDialog.Builder を拡張するクラスを作成しました。.setTitle...、.setMultiChoiceItems()、最後に show() を呼び出す "showCustomDialog()" のようなメソッドを実装しました。カスタム AlertDialog.Builder のこのメソッドは、アクティビティで使用でき、すべてが期待どおりに機能します;)

于 2010-11-06T22:36:19.480 に答える