首页 > 解决方案 > 当我尝试取消选择多个选中的复选框时出现 IndexOutOfBoundsException

问题描述

我有一个代码,我可以在其中检查多个复选框并在 textview 中显示文本。当我取消选中特定的复选框时,应该删除文本。但是当我尝试这样做时,我面临着 IOBException。下面是我的代码的图像

在 userItemsList.remove(position) 出现错误

button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            AlertDialog.Builder mBuilder = new AlertDialog.Builder(MainActivity.this);
            mBuilder.setTitle("Available Courses");
            mBuilder.setMultiChoiceItems(courseItems, checkedItems, new DialogInterface.OnMultiChoiceClickListener() {
                @Override
                public void onClick(DialogInterface dialogInterface, int position, boolean isChecked) {
                    if (isChecked){
                        if (!userItemsList.contains(position)){
                            userItemsList.add(position);
                        }
                    }else if (userItemsList.contains(position)){
                        userItemsList.remove(position);
                    }
                }
            });
            mBuilder.setCancelable(false);
            mBuilder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialogInterface, int which) {
                    StringBuilder item = new StringBuilder();
                    for (int i=0; i < userItemsList.size(); i++){
                        item.append(courseItems[userItemsList.get(i)]);

                        if (i != userItemsList.size()-1){
                            item.append(",");
                        }
                    }
                    textView.setText(item.toString());
                }
            });
            mBuilder.setNegativeButton("Dismiss", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialogInterface, int i) {
                    dialogInterface.dismiss();
                }
            });

            mBuilder.setNeutralButton("Clear All", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialogInterface, int i) {
                    for (int n = 0; n < checkedItems.length; n++){
                        checkedItems[n] = false;
                        userItemsList.clear();
                        textView.setText("");
                    }
                }
            });
            AlertDialog mDialog = mBuilder.create();
            mDialog.show();
        }
    });

标签: android

解决方案


您正在将 Dialogs 位置添加到列表中,这就是它抛出 IOB 异常的原因。您应该将项目名称添加到 List 并检查它是否存在..

我已经更新了你的代码。测试了它。现在可以正常工作了!

String[] courseItems = new String[]{"a", "x", "b", "c" };
boolean[] checkedItems = new boolean[]{false, false, false, false };
List<String> userItemsList;


AlertDialog.Builder mBuilder = new AlertDialog.Builder(Splash.this);
   mBuilder.setTitle("Available Courses");
   mBuilder.setMultiChoiceItems(courseItems, checkedItems, new DialogInterface.OnMultiChoiceClickListener() {
     @Override
     public void onClick(DialogInterface dialogInterface, int position, boolean isChecked) {
            if (isChecked) {
                  if (!userItemsList.contains(courseItems[position])) {
                      userItemsList.add(courseItems[position]);
                  }
            } else if (userItemsList.contains(courseItems[position])) {
                    userItemsList.remove(courseItems[position]);
                }
           }
            });
            mBuilder.setCancelable(false);
            mBuilder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialogInterface, int which) {
                    StringBuilder item = new StringBuilder();
                    for (int i=0; i < userItemsList.size(); i++){
                        item.append(userItemsList.get(i));

                        if (i != userItemsList.size()-1){
                            item.append(",");
                        }
                    }
                     textView.setText(item.toString());
                }
            });
            mBuilder.setNegativeButton("Dismiss", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialogInterface, int i) {
                    dialogInterface.dismiss();
                }
            });

            mBuilder.setNeutralButton("Clear All", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialogInterface, int i) {
                    for (int n = 0; n < checkedItems.length; n++){
                        checkedItems[n] = false;
                        userItemsList.clear();
                        textView.setText("");
                    }
                }
            });
            AlertDialog mDialog = mBuilder.create();
            mDialog.show();

快乐编码:)


推荐阅读