setMultiChoiceItems и мой массив

#java #android #arrays #android-alertdialog

#java #Android #массивы #android-alertdialog

Вопрос:

В моем коде я могу выбирать элементы флажков и устанавливать их в своем массиве:

protected ArrayList<Integer> selectedStatusId = new ArrayList<>();

Но когда я выбираю тот же элемент флажка, нужно удалить его из моего массива и… Я не могу этого сделать, потому что идентификатор в моем массиве отличается от моего mStatuses . Как я могу удалить нужный мне элемент?

Может быть, я могу получить все выбранные элементы после нажатия положительной кнопки?

         final ArrayList<String> statusesTitles = new ArrayList<>();
        for (int i = 0; i < mStatuses.size(); i  ) {
            statusesTitles.add(mStatuses.get(i).StatusTitle);
        }
        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
        builder.setTitle(R.string.order_dialog_status_title)
                .setMultiChoiceItems(statusesTitles.toArray(new String[statusesTitles.size()]), null, new DialogInterface.OnMultiChoiceClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i, boolean b) {
                        if (b){
                            selectedStatusId.add(mStatuses.get(i).StatusId);
                        } else {
                            // TODO How I can delete my position from array?
                        }
                    }
                })
                .setPositiveButton(R.string.order_dialog_status_positive_button, new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {
                        refreshContent();
                    }
                })
                .setNegativeButton(R.string.order_dialog_status_negative_button, new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {
                        dialogInterface.cancel();
                    }
                });
        builder.show();
 

Ответ №1:

Вы можете удалить элемент следующим способом.

     ArrayList<Integer> selectedStatusId = new ArrayList<>();
    if (true){
        selectedStatusId.add(mStatuses.get(i).StatusId);
    } else {
        //  delete the first occurrence of the specified element from array
        selectedStatusId.remove(new Integer(mStatuses.get(i).StatusId));
    }
 

Ответ №2:

  final ArrayList<String> selectedStatusId = new ArrayList<>();
        //MAKE IT STRING TYPE

        final ArrayList<String> statusesTitles = new ArrayList<>();
        for (int i = 0; i < mStatuses.size(); i  ) {
            statusesTitles.add(mStatuses.get(i).StatusTitle);
        }
        AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
        builder.setTitle(R.string.order_dialog_status_title)
                .setMultiChoiceItems(statusesTitles.toArray(new String[statusesTitles.size()]), null, new DialogInterface.OnMultiChoiceClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i, boolean b) {
                        if (b) {
                            selectedStatusId.add(String.valueOf(mStatuses.get(i).StatusId));
                        } else {
                            // TODO How I can delete my position from array?
                            selectedStatusId.remove(String.valueOf(mStatuses.get(i).StatusId));
                        }
                        //OR_______________________YOU CAN USE THIS ALSO
//                        if (selectedStatusId.contains(String.valueOf(mStatuses.get(i).StatusId))) {
//                            selectedStatusId.remove(String.valueOf(mStatuses.get(i).StatusId));
//                        } else {
//                            selectedStatusId.add(String.valueOf(mStatuses.get(i).StatusId));
//                        }
                    }
                })
                .setPositiveButton(R.string.order_dialog_status_positive_button, new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {
                        refreshContent();
                    }
                })
                .setNegativeButton(R.string.order_dialog_status_negative_button, new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialogInterface, int i) {
                        dialogInterface.cancel();
                    }
                });
        builder.show();
 

Надеюсь, это поможет..