overlord
overlord

Reputation: 1079

AlertDialog with checkboxes in android

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

Answers (1)

Sagar Pilkhwal
Sagar Pilkhwal

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

Related Questions