【发布时间】:2019-04-30 17:10:27
【问题描述】:
我有一个带有几个复选框的循环视图。从 API 接收的复选框的文本和 id。我应该将选中复选框的 id 发送到 API。现在,我有两个问题:
- 如何获取选中的复选框 ID 并存储在字符串值中?这个 该字符串必须在活动中使用。
- 当用户点击复选框并选中此复选框时,复选框的 ID 保存 在字符串中。现在,用户后悔并取消选中复选框。在 String 中,复选框的 id 应该删除。
我的一个解决方案是:
- 创建包含方法 get 和 set 的数据模型(Info_Checkbox) 身份证。
- 创建 ArrayList。
- 将选中的复选框 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}。
【问题讨论】:
-
为什么不使用布尔值
-
到目前为止你尝试了什么?
-
@NigamPatro 帖子已更新。
-
@sajjadjavadi 请检查我添加的答案。