2011-01-27 5 views
7

얘들 아,이 onCreateDialog에서 나는이 있습니다onPrepareDialog에서 setSingleChoiceItems의 내용을 설정하는 방법은 무엇입니까?

case DIALOG_REVIEW: { 
    if (bundle.containsKey("POSITION")) { 
    final int position = bundle.getInt("POSITION"); 
    ArrayList<String> alterNumbers = numbers.get(position); 
    final String[] phoneNums = new String[alterNumbers.size()]; 
    for (int i = 0; i < alterNumbers.size(); i++) { 
     phoneNums[i] = alterNumbers.get(i); 
    } 
    AlertDialog.Builder dialog = new AlertDialog.Builder(this); 
    dialog.setTitle(names.get(position) + "'s number(s)"); 
    dialog.setSingleChoiceItems(phoneNums, 0, 
     new DialogInterface.OnClickListener() { 

      @Override 
      public void onClick(DialogInterface dialog, 
       int which) { 
      // get selected item and close the dialog 
      String selectedNumber = phoneNums[which]; 
      updateUserSelectedNumber(position , selectedNumber); 
      } 
     }); 
    return dialog.create(); 
    } 

작업과 큰된다.

하지만

dialog.setSingleChoiceItems(phoneNums, 0, 
     new DialogInterface.OnClickListener() { 

phoneNums 라인에주의는 대화 상자가 팝업 때마다 변경 될 수 있다고 가정한다. onPrepareDialog 메서드를 재정의했지만 새 값을 할당하는 방법을 모르겠습니다. 그리고 거기에는 setSingleChoiceItems가 없습니다. 여기

내으로 onPrepare Dialog 방법

case DIALOG_REVIEW: { 
    final int position = bundle.getInt("POSITION"); 
    ArrayList<String> alterNumbers = numbers.get(position); 
    final String[] phoneNums = new String[alterNumbers.size()]; 
    for (int i = 0; i < alterNumbers.size(); i++) { 
    phoneNums[i] = alterNumbers.get(i); 
    } 
    AlertDialog alertDialog = (AlertDialog) dialog; 
    alertDialog.setTitle(names.get(position) + "'s number(s)"); 
    ??? 
    break; 
} 

해결책은 무엇인가? 사전에 녀석들 덕분에 .

답변

10

AlertDialog 클래스의 getListView 메서드를 사용해야합니다. 그런 다음 반환 된 객체에 setItemChecked 메소드를 사용하십시오. 예 :

두 솔루션 :

alertDialog.getListView().setItemChecked(1, true);

+0

감사합니다. – BoD

+0

soooo 많은 감사합니다. 정말 일했다 .. –

7

난 그냥 같은 문제에 직면

1/빠른 더러운

당신이 그것으로 완료 때마다 대화를 삭제 = > onPrepareDialog가 호출되지 않으므로 데이터 업데이트에 문제가 없습니다.

protected Dialog onCreateDialog(int id) { 
    ... 
    case DIALOG_REVIEW: { 
     AlertDialog.Builder dialog = new AlertDialog.Builder(this); 
     dialog.setTitle(names.get(position) + "'s number(s)"); 
     dialog.setSingleChoiceItems(phoneNums, 0,new DialogInterface.OnClickListener() { 

      @Override 
      public void onClick(DialogInterface dialog,int which) { 
      // get selected item and close the dialog 
      String selectedNumber = phoneNums[which]; 
      updateUserSelectedNumber(position , selectedNumber); 
      removeDialog(DIALOG_REVIEW); 
     } 
    }); 
    return dialog.create(); 
} 

원할 경우 onDismissListener을 입력하고 대화 상자에서 removeDialog를 닫을 수 있습니다.


2/단지 신선한 새로운 하나를 사용하여 대화 상자에서 사용하는 기존의 ArrayAdapter와 대체으로 onPrepare Dialog 방법에있어서 하나의

꽤 꽤 :

@Override 
protected void onPrepareDialog(int id, Dialog dialog) { 
    switch (id) { 
     case DIALOG_REVIEW: 
      ArrayAdapter<CharSequence> adapter = new ArrayAdapter<CharSequence>(this, android.R.layout.select_dialog_singlechoice, android.R.id.text1, phoneNums); 
      AlertDialog ad = (AlertDialog) dialog; 
      ad.getListView().setAdapter(adapter); 
     break; 
     default: 
      super.onPrepareDialog(id, dialog); 
    } 
} 

나는 것보다 같은 방법을 사용합니다 하나는 안드로이드 (froyo 소스 코드의 AlertController.java L. 854)가 처음으로 대화 상자를 채우기 위해 사용했다.