2011-01-27 11 views
7

chicos, en onCreateDialog tengo esto:cómo establecer los contenidos de setSingleChoiceItems en onPrepareDialog?

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

que está trabajando y grande.

pero preste atención a la línea

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

phoneNums se supone que debe estar cambiando cada vez que el diálogo aparece. He redefinido el método onPrepareDialog, pero no sé cómo asignarle nuevos valores. y también no hay setSingleChoiceItems allí.

aquí es mi método onPrepareDialog

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

¿Cuál es la solución? gracias de antemano chicos.

Respuesta

10

Debe utilizar el método getListView de la clase AlertDialog. Luego use el método setItemChecked en el objeto devuelto. Ejemplo:

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

+0

Gracias por esto, funcionó. – BoD

+0

Muchísimas gracias. realmente funcionó ... –

7

acabo enfrentó al mismo problema:

dos soluciones:

1/El rápido y sucio

Eliminar el diálogo cada vez que haya terminado con ella = > onPrepareDialog no se invocará para que no tenga problemas con la actualización de datos:

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

si lo prefiere, puede poner un onDismissListener y eliminar el diálogo en la ventana de diálogo.


2/El muy bonita uno

En el método onPrepareDialog basta con sustituir el antiguo ArrayAdapter utilizado por el diálogo por un nuevo uno nuevo:

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

uso el mismo método que el uno utilizado por Android (el AlertController.java L. 854 del código fuente froyo) para llenar el cuadro de diálogo la primera vez.

Cuestiones relacionadas