7

現在、AlertDialog.builder を使用して、ユーザー (チェックボックス) の複数選択リストを作成しています。これはうまく機能しますが、ボタンの 1 つがリスト内の他のすべてのボタンの選択を解除するようにする必要があります。

builder.setMultiChoiceItems(list, checked,
  new DialogInterface.OnMultiChoiceClickListener() {
   public void onClick(DialogInterface dialog,
     int item, boolean isChecked) {

    if(item == ANY_ITEM_BUT_0)
    {

     ((AlertDialog) dialog).getListView().setItemChecked(0, false);

    }
   }
  });

「true」を使用するとボックスが正常にチェックされますが、falseを使用するとチェックが解除されません(手動でtrueに設定していない限り)。ユーザーがこれらをクリックしたときに検出するために使用する必要がある別のリスナーがありますか? 「setItemChecked(0, true);」によるものと、実際に選択したものと、2つのチェックマークが設定されているように私には思えます。

これは数日間私を夢中にさせています。どんな助けでも大歓迎です。

4

4 に答える 4

8

ああ!!!選択を解除するために、チェックをnullに変更する必要があることを忘れています;)、同じ問題が発生しました。

    builder.setMultiChoiceItems(list, null, new DialogInterface.OnMultiChoiceClickListener() {
...
于 2010-01-20T21:18:10.393 に答える
3

他のアイテムの選択を解除するには、正常に機能します::

if(item == ANY_ITEM_BUT_0){    
   for(int i=0; i<items.length;i++){  
            if (item != ANY_ITEM_BUT_0)                             
           ((AlertDialog)dialog).getListView().setItemChecked(i, false);
    }
}
于 2010-01-20T19:55:04.343 に答える
1

リスト項目 (チェックボックス) はビルダー オブジェクトによって制御されるため、リスト内の値を変更できるとは思わないでください。ただし、最初のアイテムがクリックされたときにダイアログを再起動するだけで...表示されているダイアログを閉じて、新しいダイアログを作成することができます....

于 2009-11-27T22:49:30.647 に答える
0

チェックボックスをチェックしないように設定し、checkedItemsへの呼び出しで配列を設定setMultiChoiceItems()する必要がある場合は、チェックされた配列項目も false に設定する必要があります。リスナーでアクセスできるように、チェック済みの配列が最終であることを確認してください。

builder.setMultiChoiceItems(list, checked,
new DialogInterface.OnMultiChoiceClickListener() {
public void onClick(DialogInterface dialog,
 int item, boolean isChecked) {

if(isChecked && item == ANY_ITEM_BUT_0)
{
   for(int i=0; i<list.length;i++){  
      if (i != ANY_ITEM_BUT_0) {   
       checked[i] = false;                          
       ((AlertDialog)dialog).getListView().setItemChecked(i, false);
        } 
     }
   }
  }
});
于 2013-10-06T18:08:09.630 に答える