android - 如何从 android studio 中的 recyclerview 获取选中复选框的 id?
问题描述
我有一个带有几个复选框的循环视图。从 API 接收的复选框的文本和 id。我应该将选中复选框的 id 发送到 API。现在,我有两个问题:
- 如何获取选中的复选框 ID 并存储在字符串值中?这个字符串必须在活动中使用。
- 当用户单击复选框并选中此复选框时,复选框的 ID 保存在字符串中。现在,用户后悔并取消选中复选框。在字符串中,复选框的 id 应该删除。
我的解决方案之一是:
- 创建一个包含方法 get 和 set ID 的数据模型(Info_Checkbox)。
- 创建数组列表。
- 将选中的复选框 id 设置为此数组列表并使用此数组将参数发送到服务器。
但是我的代码不正确!当我检查了许多复选框时,数组列表保存了最后一个复选框 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}。
解决方案
您需要在适配器中维护一个选定项目列表。只需在 onCheckedChanged 侦听器列表中添加和删除项目。在单击提交或任何您想要的位置后,您可以从适配器中获取该列表并映射该列表并仅获取将成为您选择的 ID 列表的字符串列表。您可以将其加入一个以逗号分隔的字符串中。用于将列表 ID 加入字符串,您可以。
TextUtils.join(",",[Your IDs list])
推荐阅读
- settings - 如何更改标题栏和页面中的铬名称
- firebase - Firebase 示例函数“generateThumbnail”不会部署
- flutter - ListView 中的 Dismissible 从 PageView 拾取滑动
- bash - 如果命令是子进程程序的结果,bash如何搜索程序
- html - 居中
- 不考虑项目符号的元素
- python - 使用 numpy 执行 .sum() 操作时跳过字符串
- jquery - 如何使用 jquery 更改未嵌套在子标签中的文本?
- python - 查找最低测试分数和两个高分的平均值
- python - urllib.request:POST 数据应该是字节、字节的可迭代或文件对象
- c# - 将对象添加到列表时如何修复覆盖