2009-10-28 15 views
6

私は現在、AlertDialog.builderを使用して、ユーザーのチェックリストを作成しています。これは、ボタンの1つでリスト内の他のすべての選択を解除したい場合を除いて、うまくいきます。AlertDialog MultiChoiceItemsリスナーの問題

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に設定している場合を除きます。)私が使用する必要があり、別のリスナーがありますユーザーがこれらをクリックしたときを検出するには? "setItemChecked(0、true);"と "実際にそれを選択する"の2つのチェックマークが設定されているようです。

これは数日間ナットを運転しています。どんな助けでも大歓迎です。

答えて

1

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

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); 
    } 
} 
8

OH !!!私はあなたがnullにチェックを変更する必要があります選択を解除することを忘れて;)、私は同じ問題があった。

builder.setMultiChoiceItems(list, null, new DialogInterface.OnMultiChoiceClickListener() { 
... 
+1

あなたは私に多くの時間を保存しました:)ありがとう!私はfalseですべての項目を設定していたが、それはnullがすべて私が必要と思われる! – tereru

0

あなたがチェックされないようにチェックボックスを設定したいとあなたがsetMultiChoiceItems()への呼び出しにcheckedItems配列を設定する必要がある場合、あなたにも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); 
     } 
    } 
    } 
    } 
}); 
関連する問題