I am using Dialog in my app to allow user to make multiple selection, Here is my 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();
}
});
And I have two queries:
Like I have selected Red and Purple
(then in TextView getting output like this: Red, Purple,
)
First of all I would like to remove comma (which getting with last value)
I already selected Red and Purple, when i again open dialog not getting red and purple as selected by default (How can i save the state)enter code here
, and as a result, when i am again selecting these (Red and Purple) two items, getting each item twice in a TextView
Try updating your textview after the loop
And if your loop iteration reaches the length of the checkedcolors
then donot append a comma.
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 will be updated only once, so you wont be getting each item twice in the TextView.
For saving the state you have to use SharedPreference
.
For saving into preference use this
SharedPreferences preferences = mContext.getSharedPreferences("PREFERENCE_NAME", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = preferences.edit();
editor.putBoolean("yourColor",isChecked);
editor.commit();
And to retrieve
boolean isChecked = preferences.getBoolean("yourColor");