首页 > 解决方案 > 如何从 android studio 中的 recyclerview 获取选中复选框的 id?

问题描述

我有一个带有几个复选框的循环视图。从 API 接收的复选框的文本和 id。我应该将选中复选框的 id 发送到 API。现在,我有两个问题:

我的解决方案之一是:

但是我的代码不正确!当我检查了许多复选框时,数组列表保存了最后一个复选框 id。你能帮助我吗?

Context context;
public ArrayList<Info_Filter> items = new ArrayList<>();
public SparseBooleanArray array = new SparseBooleanArray();
public List<Info_Filter> orig;
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();
            }
        });
    }
}

在活动中:

private String getCheckboxes(ArrayList<Info_Checkbox> checkboxes) {

    String category = "";
    for (int i = 0; i < checkboxes.size(); i++) {
        category = checkboxes.get(i).getId() + "," + category;
    }
    Log.i("asfaf", category);
    checkboxes.clear();
    return category;
}

如果选中复选框的 id 为 {7,5},则此方法返回 {5,5}。

标签: androidcheckbox

解决方案


您需要在适配器中维护一个选定项目列表。只需在 onCheckedChanged 侦听器列表中添加和删除项目。在单击提交或任何您想要的位置后,您可以从适配器中获取该列表并映射该列表并仅获取将成为您选择的 ID 列表的字符串列表。您可以将其加入一个以逗号分隔的字符串中。用于将列表 ID 加入字符串,您可以。

TextUtils.join(",",[Your IDs list])


推荐阅读