2009-10-28 8 views
6

현재 AlertDialog.builder를 사용하여 사용자 (체크 박스)에 대한 다중 선택 목록을 만듭니다. 버튼 중 하나에서 목록에있는 다른 모든 요소의 선택을 취소하기를 원한다는 것을 제외하고는 위 작업이 유용합니다.AlertDialog MultiChoiceItems Listener 문제

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"를 성공적 확인란을 선택합니다 사용하지만 (내가 직접 손 전에 true로 설정하지 않는 한.) 내가 사용한다 별도의 수신기가 있는가 사용자가이를 클릭하면 감지 할 수 있습니까? 그것은 "setItemChecked (0, true);"에 의해 하나가 실제로 그것을 선택함으로써 하나씩 두 개의 체크 마크가 설정되어있는 것처럼 보입니다.

이것은 이제 며칠 동안 나를 괴롭혔습니다. 어떤 도움도 크게 감사 할 것입니다.

답변

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로 체크 변경해야합니다 선택을 취소하는 것을 잊지;), 나는 같은 문제가됐다. 당신이 확인되지 않을 수있는 체크 박스를 설정하려는 당신이 setMultiChoiceItems()에 호출에 checkedItems 배열을 설정해야하는 경우

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

당신은 저에게 많은 시간을 저축했습니다 :) 감사합니다! 나는 false로 모든 항목을 설정했지만 그것은 null이 모두 필요한 것 같습니다! – tereru

0

, 당신은뿐만 아니라 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); 
     } 
    } 
    } 
    } 
});