2014-09-17 3 views
1

У меня есть AlertDialog с несколькими флажками с множественным выбором. Я хочу, чтобы значения всех отмеченных элементов сохранялись в строковой переменной после нажатия кнопки «ok». Но я могу проверить значение только последнего элемента. Я хочу, чтобы все значения сохранялись в переменной String.AlertDialog с флажками в android

Ниже приведен фрагмент кода 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(); 

Ошибки являются

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) 
+0

сообщение об ошибке. – Simas

ответ

1
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 
    }} 
+0

Отлично, это сработало для вас .. Проголосовать, если возможно .. Счастливое кодирование :) –

Смежные вопросы