Yo estoy usando el cuadro de Diálogo en el que mi aplicación para permitir a los usuarios hacer selección múltiple, Aquí está mi código:

    btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//Build an AlertDialog
AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
//String array for alert dialog multi choice items
String[] colors = new String[]{
"Red",
"Green",
"Blue",
"Purple",
"Olive"
};
//Boolean array for initial selected items
final boolean[] checkedColors = new boolean[]{
false, //Red
false, //Green
false, //Blue
false, //Purple
false //Olive
};
//Convert the color array to list
final List<String> colorsList = Arrays.asList(colors);
//Set multiple choice items for alert dialog
builder.setMultiChoiceItems(colors, checkedColors, new DialogInterface.OnMultiChoiceClickListener() {
@Override
public void onClick(DialogInterface dialog, int which, boolean isChecked) {
//Update the current focused item's checked status
checkedColors[which] = isChecked;
//Get the current focused item
String currentItem = colorsList.get(which);
//Notify the current action
Toast.makeText(getApplicationContext(),
currentItem + " " + isChecked, Toast.LENGTH_SHORT).show();
}
});
//Specify the dialog is not cancelable
builder.setCancelable(false);
//Set a title for alert dialog
builder.setTitle("Your preferred colors?");
//Set the positive/yes button click listener
builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//Do something when click positive button
tv.setText("Your preferred colors..... \n");
for (int i = 0; i<checkedColors.length; i++){
boolean checked = checkedColors[i];
if (checked) {
tv.setText(tv.getText() + colorsList.get(i) + ", ");
}
}
}
});
//Set the negative/no button click listener
builder.setNegativeButton("No", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//Do something when click the negative button
}
});
//Set the neutral/cancel button click listener
builder.setNeutralButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//Do something when click the neutral button
}
});
AlertDialog dialog = builder.create();
//Display the alert dialog on interface
dialog.show();
}
});

Y tengo dos consultas:

  1. Como he elegido el color Rojo y Púrpura

    (entonces en TextView obtener una salida como esta: Red, Purple,)

    Primero de todo me gustaría eliminar la coma (, que llegar con el último valor)

  2. Ya he seleccionado Rojo y Púrpura, cuando volví a abrir diálogo no ponerse rojo y púrpura, como seleccionado por defecto (¿Cómo puedo guardar el estado)enter code here, y como resultado, cuando estoy de nuevo la selección de estos (Rojo y Morado) de los dos elementos, consiguiendo cada elemento dos veces en un TextView

OriginalEl autor Oreo | 2015-09-01

2 Comentarios

  1. 2

    Intente actualizar el textview después de que el bucle

    Y si el bucle de iteración que se alcanza la longitud de la checkedcolors entonces nose anexar una coma.

    public void onClick(DialogInterface dialog, int which) {
    //Do something when click positive button
    tv.setText("Your preferred colors..... \n");
    for (int i = 0; i < checkedColors.length; i++) {
    boolean checked = checkedColors[i];
    String colors = "";
    if (checked) {
    colors = colors + colorsList.get(i) ;
    if (i != checkedColors.length - 1) {
    colors = colors + ", ";
    }
    }
    }
    tv.setText(tv.getText() + colors);
    }

    Yor textview se actualiza sólo una vez, para que no esté recibiendo cada elemento dos veces en el TextView.

    Para guardar el estado tiene que utilizar SharedPreference.

    Para guardar en la preferencia de uso de este

           SharedPreferences preferences = mContext.getSharedPreferences("PREFERENCE_NAME", Context.MODE_PRIVATE);
    SharedPreferences.Editor editor = preferences.edit();
    editor.putBoolean("yourColor",isChecked);
    editor.commit();

    Y recuperar

            boolean isChecked = preferences.getBoolean("yourColor");
    muchas gracias
    Me alegra poder ayudar 🙂
    me pueden ayudar en la creación de Vistas Paso-como Paso 1 form > Paso 2 y el Paso 3 (Final) ?
    Pasos para imlementing la SharedPreference??
    no @Jefe Como en muchas de las aplicaciones para crear una cuenta o reservar una cita o reservar una habitación, tenemos que llenar tres formas diferentes (Paso 1 – Perfil) > (Paso 2 – Reserva) > (Paso 3 : Revisar el Detalle) espero que ahora usted puede entender mi requisito

    OriginalEl autor Emil

  2. 4

    Por favor, intente esto y mejorar la estructura de tu código para que pueda ser gestionado de manera eficiente.

    import android.app.AlertDialog;
    import android.content.DialogInterface;
    import android.os.Bundle;
    import android.support.v7.app.AppCompatActivity;
    import android.view.View;
    import android.widget.Button;
    import android.widget.TextView;
    import android.widget.Toast;
    import java.util.ArrayList;
    public class MainActivity extends AppCompatActivity {
    private Button btn;
    private TextView txtSelected;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    btn = (Button) findViewById(R.id.btn_dialog);
    txtSelected = (TextView) findViewById(R.id.txt_selected);
    final ArrayList<ColorVO> colorList = new ArrayList<ColorVO>();
    //String array for alert dialog multi choice items
    final String[] colors = new String[]{
    "Red",
    "Green",
    "Blue",
    "Purple",
    "Olive"
    };
    //Boolean array for initial selected items
    final boolean[] checkedColors = new boolean[]{
    false, //Red
    false, //Green
    false, //Blue
    false, //Purple
    false //Olive
    };
    btn.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
    AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this);
    //make a list to hold state of every color
    for (int i = 0; i < colors.length; i++) {
    ColorVO colorVO = new ColorVO();
    colorVO.setName(colors[i]);
    colorVO.setSelected(checkedColors[i]);
    colorList.add(colorVO);
    }
    //Do something here to pass only arraylist on this both arrays ('colors' & 'checkedColors')
    builder.setMultiChoiceItems(colors, checkedColors, new DialogInterface.OnMultiChoiceClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which, boolean isChecked) {
    //set state to vo in list
    colorList.get(which).setSelected(isChecked);
    Toast.makeText(getApplicationContext(),
    colorList.get(which).getName() + " " + isChecked, Toast.LENGTH_SHORT).show();
    }
    });
    builder.setCancelable(false);
    builder.setTitle("Your preferred colors?");
    builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
    txtSelected.setText("Your preferred colors..... \n");
    //save state of selected vos
    ArrayList<ColorVO> selectedList = new ArrayList<>();
    for (int i = 0; i < colorList.size(); i++) {
    ColorVO colorVO = colorList.get(i);
    colors[i] = colorVO.getName();
    checkedColors[i] = colorVO.isSelected();
    if (colorVO.isSelected()) {
    selectedList.add(colorVO);
    }
    }
    for (int i = 0; i < selectedList.size(); i++) {
    //if element is last then not attach comma or attach it
    if (i != selectedList.size() - 1)
    txtSelected.setText(txtSelected.getText() + selectedList.get(i).getName() + " ,");
    else
    txtSelected.setText(txtSelected.getText() + selectedList.get(i).getName());
    }
    colorList.clear();
    }
    });
    builder.setNegativeButton("No", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
    //make sure to clear list that duplication dont formed here
    colorList.clear();
    }
    });
    builder.setNeutralButton("Cancel", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
    //make sure to clear list that duplication dont formed here
    colorList.clear();
    }
    });
    AlertDialog dialog = builder.create();
    dialog.show();
    }
    });
    }
    private class ColorVO {
    private String name;
    private boolean selected;
    public String getName() {
    return name;
    }
    public void setName(String name) {
    this.name = name;
    }
    public boolean isSelected() {
    return selected;
    }
    public void setSelected(boolean selected) {
    this.selected = selected;
    }
    }

    Resolver todas sus consultas :

    1. Como he elegido el color Rojo y Púrpura

    => Comprobar que el índice del elemento, Si es la última, entonces no adjuntar coma.

    2. Ya he seleccionado Rojo y Púrpura, cuando volví a abrir diálogo no ponerse rojo y púrpura, como seleccionado por defecto (¿Cómo puedo guardar el estado)

    => guardar estado utilizando vo en su defecto de la matriz.Será guardado hasta que su actividad no es destruido.

    3. cuando estoy de nuevo la selección de estos (Rojo y Morado) de los dos elementos, consiguiendo cada elemento dos veces en un TextView

    => Borrar la lista por lo que los valores no son duplicadas.

    sin duda @MamataGelanee que han proporcionado una gran y completa solución de mi requisito… pero el Jefe de la solución también es bueno… para mí que ambos proporcionan mejores respuestas.. así que no puede aceptar la solución porque ya he aceptado Jefe, pero yo marcarse como útil…
    me pueden ayudar en la creación de Vistas Paso-como Paso 1 form > Paso 2 y el Paso 3 (Final)
    Como en muchas de las aplicaciones para crear una cuenta o reservar una cita o reservar una habitación, tenemos que llenar tres formas diferentes (Paso 1 – Perfil) > (Paso 2 – Reserva) > (Paso 3 : Revisar el Detalle) espero que ahora usted puede entender mi requisito @MamataGelanee
    mi mala suerte hace unos días practo estaba usando, pero ahora se les ha quitado .. me estoy buscando la imagen para más claridad
    Esta es una gran respuesta. Muy útil, gracias.

    OriginalEl autor AndiGeeky

Dejar respuesta

Please enter your comment!
Please enter your name here