Question

Hey fellow Android Developers, Im having a issue currently with the below code. I am unable to figure out a way i can easily reference which Checkbox is clicked, Currently the code below is simply a Preference that when clicked, displays a AlertDialog with multiple Checkboxes.

The goal is do something specific when that Checkbox is checked, however i want to do something different possibly with each item.

Code

Preference checkboxalert = (Preference) findPreference("checkboxalert");
           checkboxalert
            .setOnPreferenceClickListener(new OnPreferenceClickListener() {

        final CharSequence[] items = {" Easy "," Medium "," Hard "," Very Hard "};
        final ArrayList<Integer> selectedItems=new ArrayList<Integer>();

        public boolean onPreferenceClick(Preference preference) {
               AlertDialog.Builder builder = new AlertDialog.Builder(context);
                 builder.setTitle("Select The Difficulty Level");
                 builder.setMultiChoiceItems(items, null,
                   new DialogInterface.OnMultiChoiceClickListener() {

                    @Override
                    public void onClick(DialogInterface dialog, int indexSelected,
                                 boolean isChecked) {
                        if (isChecked) { 
                            //WHERE I WANT TO REFERENCE WHICH CHECKBOX IS CLICKED

                            selectedItems.add(indexSelected);
                            Log.i("Preference - Checkbox", "Something was clicked");

                             } else if (selectedItems.contains(indexSelected)) { 
                                 selectedItems.remove(Integer.valueOf(indexSelected));
                             }
                         }
                     })
                     .setPositiveButton("OK", new DialogInterface.OnClickListener() {
                         @Override
                         public void onClick(DialogInterface dialog, int id) {
                         }
                     })
                     .setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
                         @Override
                         public void onClick(DialogInterface dialog, int id) {
                         }
                     });
                        dialog = builder.create();
                        dialog.show();

                return true;
                }
            });
Was it helpful?

Solution

What's wrong with using the index?

@Override
public void onClick(DialogInterface dialog, int indexSelected,boolean isChecked) 
{
    if (isChecked) { 
     selectedItems.add(indexSelected);

    //WHERE I WANT TO REFERENCE WHICH CHECKBOX IS CLICKED
    switch (indexSelected)
    {
         case 0:
            // do something if the first box is checked
            break;
         case 1:
            // do something if the second box is checked
            break;
         ...
    }
}

It seems like this should work unless I am missing what you want.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top