Android - AlertDialogのアイテムのisChecked()を取得しますか?

setMultiChoiceItems()を使用してチェックボックス項目で AlertDialog を作成しました。 Dialogに setPositiveButton()setNegativeButton()を追加しました。

ポジティブボタンを押すと、ダイアログ内の項目のリストを繰り返して、それぞれがチェックされているかどうかを判断したいと思います。しかし、これを行うには明らかな方法はないと思われます。

私はこれからアイテムのリストを得ることができます:

alertDialog.getListView().getItemAtPosition(n);

isChecked()などの項目があるかどうかは確認できません。私ができることは、 .toString()を使ってテキストを印刷することだけです。

私がしたいことを行う唯一の方法は、onMultiChoiceClickListener()。onClick()を使用してアイテムがチェックされたときに待機し、クリックされたアイテムとチェックされているかどうかを判断することです。この情報を配列またはリストに格納する必要があります。次に、ポジティブボタンが押されたときに、この配列を参照して、チェックされているかどうかを判断する必要があります。私はこの方法がうまくいくことを知っていますが、事実の後で項目がチェックされているかどうかをチェックするプログラム的な方法はありますか?

1

2 答え

私は私の答えを見つけた。私はちょうど間違った方法を探していた。

Solution alertDialog.getListView().isItemChecked(position);

更新。これはバグです

私はあまりにも早く話しました。私はこの方法でAndroidのバグを発見したと思う。あなたのリストにアイテム数が多い場合、リストがスクロール可能であり、リストをスクロールしてそれらを表示する必要がある場合、そのアイテムはデフォルトでチェックされていてもUNCHECKEDとして返されますまだ画面にスクロールされています。 こちらと報告しました。

2
追加された

最も簡単でおそらく最も汚い答えはCheckBoxにキャストすることです     (CheckBox)alertDialog.getListView()。getItemAtPosition(n))。isChecked();//ClassCastExceptionを回避するためにキャストの前にinstanceofのチェックを行う

もう1つの方法は、選択された項目を保持するオブジェクト(配列やリストを保持するバンドルまたはその他のもの)を渡す、警告ダイアログを拡張する方法(選択されたチェックボックスを返すメソッドを追加する)です。 onMultiChoiceClickListener()。onClick()を使用する必要があります。チェックボックスがオフの場合は配列から削除し、onClickメソッドでチェックされている場合は追加します。または、キーとして選択され、選択されていないマップ(マルチマップ参照:google guavaまたはapache)と、値としてチェックボックス(バッキングオブジェクトが望ましい)を使用できます。

HTH

2
追加された