Получить список проверенных флажков из переработчика - PullRequest
0 голосов
/ 29 апреля 2019

У меня есть Recyclerview, который содержит несколько флажков. эти флажки получены от API (флажки текст и идентификатор). Я хочу получить список идентификаторов отмеченных флажков для отправки на сервер. Одно из моих решений:

  1. создать модель данных (Info_Checkbox), содержащую метод get и set Я БЫ.
  2. создать ArrayList.
  3. установить идентификатор флажка в этот список массивов и использовать этот массив для отправить параметры на сервер.

Но мой код неверен! Когда я установил несколько флажков, список массивов сохранил идентификатор последних флажков. Можете ли вы сказать другое решение или исправить эту ошибку?

Context context;
public ArrayList<Info_Filter> items = new ArrayList<>();
public SparseBooleanArray array = new SparseBooleanArray();
public ArrayList<Info_Checkbox> checkboxes = new ArrayList<>();
private Info_Checkbox info_checkbox = new Info_Checkbox();
public AdapterRecyFilterGroup(Context context, ArrayList<Info_Filter> items) {
    this.context = context;
    this.items = items;
}
@NonNull
@Override
public SetViewHolderFilter onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
    View view = LayoutInflater.from(viewGroup.getContext())
            .inflate(R.layout.sample_filter_grouping, viewGroup, false);
    return new SetViewHolderFilter(view);
}
@Override
public void onBindViewHolder(@NonNull SetViewHolderFilter setViewHolderFilter, int i) {
    setViewHolderFilter.checkBox.setText(items.get(i).getName());
    if (array.get(i)) {
        setViewHolderFilter.checkBox.setChecked(true);
    } else {
        setViewHolderFilter.checkBox.setChecked(false);
    }
}
@Override
public int getItemCount() {
    return items == null ? 0 : items.size();
}

public class SetViewHolderFilter extends RecyclerView.ViewHolder {
    CheckBox checkBox;
    public SetViewHolderFilter(@NonNull final View itemView) {
        super(itemView);
        checkBox = itemView.findViewById(R.id.cb_filter);
        checkBox.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (array.get(getAdapterPosition())) {      //!checked
                    array.put(getAdapterPosition(), false);
                    info_checkbox.setId(items.get(getAdapterPosition()).getId());
                    checkboxes.remove(info_checkbox);
                } else {        //checked
                    array.put(getAdapterPosition(), true);
                    info_checkbox.setId(items.get(getAdapterPosition()).getId());
                    checkboxes.add(info_checkbox);
                }
                notifyDataSetChanged();
            }
        });
    }
}

Ответы [ 2 ]

0 голосов
/ 30 апреля 2019

Это должно сработать:

checkBox.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    int pos = getAdapterPosition();
                    if (pos < 0) {
                        pos = (int) checkBox.getTag();
                    }
                    boolean isChecked = !list.get(pos).isChecked;
                    items.get(pos).isChecked = isChecked;
                    if (isChecked) {
                        selectedCount++;
                        checkBox.setChecked(true);
                    } else {
                        selectedCount--;
                        checkBox.setChecked(false);
                    }
                }
            });

в BindViewHolder:

setViewHolderFilter.checkBtn.setChecked(list.get(position).isChecked);

Теперь вы можете получить проверенный список checkBox в ваших элементах ArrayList и можете делать все что угодно.

0 голосов
/ 30 апреля 2019

вы должны создать логическую переменную в своем классе Info_Filter, и когда вы устанавливаете флажок, тогда установите значение логической переменной true, а когда вы снимите флажок, измените значение логической переменной false этой конкретной позиции, и после этого, когда вам нужно, вы можете узнать, сколько логических переменных истинно и сколько ложно, тогда вы можете получить точные элементы, сколько проверять или нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...