Reputation: 1079
I'm having an AlertDialog with few checkboxes with multiple choice enabled. I want to get the values of all checked items to be stored in a string variable after clicking "ok" button. But I'm able to get the value of only last item checked. I want all the values to be stored in a String variable.
Following is my code snippet of the AlertDialog.
final CharSequence[] itemsForPattern = { "Patchy", "Wavy Markings", "Stripes", "Bands"};
String paternSelected = null;
final ArrayList<Object> selectedItems = new ArrayList<>();
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Select the pattern on the wing");
builder.setMultiChoiceItems(itemsForPattern, null, new DialogInterface.OnMultiChoiceClickListener() {
@Override
public void onClick(DialogInterface dialog, int indexSelected, boolean isChecked) {
// TODO Auto-generated method stub
if(isChecked){
selectedItems.add(indexSelected);
}
else if(selectedItems.contains(indexSelected)){
//This line is giving arrayIndexOutOfBounds exception after unchecking a checkeditem
selectedItems.remove(indexSelected);
}}
})
.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
//Here I'm successfully able to get the checked item values
for(int i= 0; i < selectedItems.size(); i++){
paternSelected = (String) itemsForPattern[(int) selectedItems.get(i)];
tv_Choosen.append("(" + paternSelected + ")");
}
if(patternCode.equalsIgnoreCase("hind-wing")){
// Here I'm trying to save all the values in one single String variable for which
// I'm getting only the last checked value here
String S2DB_hw_pattern = paternSelected;
}
else
String S2DB_fw_pattern = paternSelected;
}
})
.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
}
});
dialog = builder.create();
dialog.show();
Errors are as follows
E/AndroidRuntime(1915): FATAL EXCEPTION: main
E/AndroidRuntime(1915): java.lang.IndexOutOfBoundsException: Invalid index 1, size is 1
09-17 17:49:30.586: E/AndroidRuntime(1915): at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:251)
09-17 17:49:30.586: E/AndroidRuntime(1915): at java.util.ArrayList.remove(ArrayList.java:399)
09-17 17:49:30.586: E/AndroidRuntime(1915): at com.example.projectb.main.ImageMapTestActivity$3.onClick(ImageMapTestActivity.java:532)
09-17 17:49:30.586: E/AndroidRuntime(1915): at com.android.internal.app.AlertController$AlertParams$4.onItemClick(AlertController.java:953)
09-17 17:49:30.586: E/AndroidRuntime(1915): at android.widget.AdapterView.performItemClick(AdapterView.java:298)
09-17 17:49:30.586: E/AndroidRuntime(1915): at android.widget.AbsListView.performItemClick(AbsListView.java:1100)
09-17 17:49:30.586: E/AndroidRuntime(1915): at android.widget.AbsListView$PerformClick.run(AbsListView.java:2749)
09-17 17:49:30.586: E/AndroidRuntime(1915): at android.widget.AbsListView$1.run(AbsListView.java:3423)
09-17 17:49:30.586: E/AndroidRuntime(1915): at android.os.Handler.handleCallback(Handler.java:725)
09-17 17:49:30.586: E/AndroidRuntime(1915): at android.os.Handler.dispatchMessage(Handler.java:92)
09-17 17:49:30.586: E/AndroidRuntime(1915): at android.os.Looper.loop(Looper.java:137)
09-17 17:49:30.586: E/AndroidRuntime(1915): at android.app.ActivityThread.main(ActivityThread.java:5039)
09-17 17:49:30.586: E/AndroidRuntime(1915): at java.lang.reflect.Method.invokeNative(Native Method)
09-17 17:49:30.586: E/AndroidRuntime(1915): at java.lang.reflect.Method.invoke(Method.java:511)
09-17 17:49:30.586: E/AndroidRuntime(1915): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
09-17 17:49:30.586: E/AndroidRuntime(1915): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
09-17 17:49:30.586: E/AndroidRuntime(1915): at dalvik.system.NativeStart.main(Native Method)
Upvotes: 1
Views: 189
Reputation: 3993
if(isChecked){
selectedItems.add(indexSelected);
}
else if(selectedItems.contains(indexSelected)){
//This line is giving arrayIndexOutOfBounds exception after unchecking a checkeditem
selectedItems.remove(selectedItems.indexOf(indexSelected)); //<--Add this
}}
Upvotes: 1