Chicos, en onCreateDialog tengo este:

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 grandes.

PERO preste atención a la línea de

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

phoneNums se supone que debe estar cambiando cada vez el cuadro de diálogo emergente.
He anular onPrepareDialog método, pero no sé cómo asignar nuevos valores a la misma.
y también no hay setSingleChoiceItems allí.

aquí está mi onPrepareDialog método

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.

OriginalEl autor Varand Pezeshkian | 2011-01-27

2 Comentarios

  1. 10

    Necesita utilizar getListView método de la clase AlertDialog. A continuación, utilice setItemChecked método en el objeto devuelto. Ejemplo:

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

    Gracias por esto, se trabajó.
    Gracias tan mucho. realmente funcionó..

    OriginalEl autor Andrzej Duś

  2. 7

    Yo sólo enfrentan el mismo problema:

    Dos soluciones:

    1/El rápido y sucio

    Eliminar el cuadro de Diálogo cada vez que se termine con ella => onPrepareDialog no se llama así, usted no tendrá problemas con la actualización de los 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 usted prefiere, usted puede poner una onDismissListener y hacer el removeDialog en el cuadro de diálogo despedir.


    2/El muy bonito

    En el onPrepareDialog método basta con sustituir el antiguo ArrayAdapter utilizado por el diálogo por una fresca nueva:

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

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

    OriginalEl autor ol_v_er

Dejar respuesta

Please enter your comment!
Please enter your name here