Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/203.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何在多复选框选择中从ArrayList中删除未选中的元素?_Android_Android Dialog - Fatal编程技术网

Android 如何在多复选框选择中从ArrayList中删除未选中的元素?

Android 如何在多复选框选择中从ArrayList中删除未选中的元素?,android,android-dialog,Android,Android Dialog,我正在传递一个整数数组列表,该列表保存所选内容并基于所选内容检索该内容,但当我从“检查所选内容”中删除该项目时,它不会从文本中显示的数组列表中删除。这是我处理多重检查的逻辑 public class MainFragment extends Fragment { private Button buttonUser; String[] listItems; boolean[] checkedItems; ArrayList<Integer> m

我正在传递一个整数数组列表,该列表保存所选内容并基于所选内容检索该内容,但当我从“检查所选内容”中删除该项目时,它不会从文本中显示的数组列表中删除。这是我处理多重检查的逻辑

    public class MainFragment extends Fragment {

    private Button buttonUser;
    String[] listItems;
    boolean[] checkedItems;
    ArrayList<Integer> mUserItems = new ArrayList<>();
    private Context context;
    private AppCompatTextView compatTextView;

    public static MainFragment newInstance() {
        return new MainFragment();
    }

    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        listItems = getResources().getStringArray(R.array.person_array);
        checkedItems = new boolean[listItems.length];
        context = getActivity();
    }

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_main, container, false);
        buttonUser = (Button) view.findViewById(R.id.buttonUser);
        compatTextView = (AppCompatTextView) view.findViewById(R.id.text_view_selection);

        buttonUser.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                AlertDialog.Builder alert = new AlertDialog.Builder(context);
                alert.setTitle("Select Person");
                alert.setMultiChoiceItems(listItems, checkedItems, new DialogInterface.OnMultiChoiceClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which, boolean isChecked) {
                        if (isChecked) {
                            if (!mUserItems.contains(which)) {
                                mUserItems.add(which);
                            }
                        } else if (!mUserItems.contains(which)){
                            mUserItems.remove(which);
                        }
                    }
                });

                alert.setCancelable(false);
                alert.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        String items = "";
                        for (int i = 0; i < mUserItems.size(); i++) {
                            items = items.concat(listItems[mUserItems.get(i)]);
                            if (i != mUserItems.size() - 1) {
                                items = items + ", ";
                            }
                            compatTextView.setText(items);
                        }
                    }
                });
                alert.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        dialog.dismiss();
                    }
                });
                AlertDialog dialog = alert.create();
                dialog.show();
            }
        });
        return view;
    }
}

这在某种程度上是正确的,但当我从警报对话框中取消选择选项时,列表不会更新并显示以前的检查数据。

我认为如果isChecked为false,else if部分将产生false。可能应该是这样的吗?:
else if(mUserItems.contains(which))

是这样的,但当我最后从列表中选择任意随机项时,它会崩溃,出现数组越界异常。如果(!mUserItems.contains(which))的话,这就是我使用else的原因
@Override
public void onClick(DialogInterface dialog, int which, boolean isChecked) {
                    if (isChecked) {
                        if (!mUserItems.contains(which)) {
                            mUserItems.add(which);
                        }
                    } else if (!mUserItems.contains(which)){
                        mUserItems.remove(which);
                    }
                }