Wie kann ich Kontrollieren, auf MultiChoice AlertDialog
Ich bin mit Dialog in meiner app, um Benutzern zu erlauben, mehrere Auswahl, Hier ist mein code:
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();
}
});
Und ich habe zwei Abfragen:
-
Wie ich ausgewählt habe, Rot und Lila
(dann in TextView erste Ausgabe:
Red, Purple,
)Zunächst möchte ich Entferne Komma (, die immer mit dem letzten Wert)
-
Ich bereits ausgewählt Rot und Lila, wenn ich wieder öffnen-dialog nicht immer rot und lila als standardmäßig aktiviert (Wie kann ich den Zustand sichern)
enter code here
, und als ein Ergebnis, wenn ich wieder die Auswahl dieser (Rot und Lila), die zwei Elemente, immer jedes Element zweimal in einem TextView
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen, die Aktualisierung Ihrer textview nach der Schleife
Und wenn Ihr loop iteration erreicht die Länge der
checkedcolors
dann donot fügen Sie ein Komma.Yor textview wird aktualisiert, nur einmal, so dass Sie nicht bekommen, jedes item zweimal in die TextView.
Zur Rettung des Staats verwenden Sie
SharedPreference
.Für das speichern in der Präferenz verwenden Sie diese
Und abrufen
SharedPreference
??Bitte versuchen Sie dies und Verbesserung der Struktur des Codes, so dass es effizient verwaltet werden.
Gelöst alle Ihre Anfragen :
1. Wie ich ausgewählt habe, Rot und Lila
=> Überprüfen Sie für den index des Elements, Wenn es zuletzt dann nicht legen Komma.
2. Ich habe bereits ausgewählten Rot und Lila, wenn ich wieder öffnen-dialog nicht immer rot und lila als standardmäßig aktiviert (Wie kann ich den Zustand sichern)
=> speichern des Zustands mit vo in Ihrem Standard-array.Es wird gespeichert werden, bis Ihre Aktivität nicht zerstört.
3. wenn ich wieder die Auswahl dieser (Rot und Lila), die zwei Elemente, immer jeden Artikel zweimal in ein TextView
=> Liste Löschen, sodass die Werte nicht bekommen, dupliziert.