2011-01-27 18 views
7

Çocuklar, onCreateDialog i bu var:onPrepareDialog'da setSingleChoiceItems içeriğinin nasıl ayarlanacağı?

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

çalışan ve büyük olan.

ANCAK

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

phoneNums hat dikkat iletişiminin açıldığını, her zaman değişen durumundadırlar. PrepareDialog yöntemini geçersiz kıldım ama ona yeni değerler atamayı bilmiyorum. ve ayrıca orada setSingleChoiceItems yoktur. Burada

benim onPrepareDialog yöntem

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

çözümü nedir nedir? şimdiden teşekkürler çocuklar.

cevap

10

AlertDialog sınıfından getListView yöntemini kullanmanız gerekir. Ardından döndürülen nesne üzerinde setItemChecked yöntemini kullanın. Örnek:

İki çözümleri::

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

+0

Bunun için teşekkürler. – BoD

+0

Çok teşekkür ederim. Gerçekten işe yaradı .. –

7

Ben de aynı sorunla karşı karşıya

1/hızlı ve kirli

onunla bitirdikten her zaman Dialog Sil = > onPrepareDialog, veri güncellemesiyle ilgili sorun yaşamayacak şekilde çağrılmayacaktır:

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

İsterseniz, bir onDismissListener koyabilirsiniz ve iletişim kutusundaki removeDialog'u devre dışı bırakabilirsiniz.


2/sadece yepyeni birer iletişim tarafından kullanılan eski ArrayAdapter yerine onPrepareDialog yönteminde bir

oldukça hoş:

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

ben daha aynı yöntemi kullanmak Diyalog ilk kez doldurmak için android tarafından kullanılan (froyo kaynak kodunun AlertController.java L. 854).

İlgili konular