我有一些复选框的recyclearview。从API收到的复选框的文本和ID。我应该向API发送已选中复选框的ID。现在,我有两个问题:
如何检查复选框ID并存储在String值中?这个字符串必须在活动中使用。
当用户点击复选框并选中此复选框时,复选框的ID保存在字符串中。现在,用户后悔并取消选中复选框。在String中,复选框的id应该删除。
我的解决方案之一是:
创建包含方法get和set ID的数据模型(Info_Checkbox)。
创建ArrayList。
将选中的复选框ID设置为此数组列表,并使用此数组将params发送到服务器。
但我的代码不正确!当我检查了许多复选框时,数组列表保存最后一个复选框id。你能帮助我吗?
Context context;
public ArrayList items = new ArrayList<>();
public SparseBooleanArray array = new SparseBooleanArray();
public List orig;
public ArrayList checkboxes = new ArrayList<>();
private Info_Checkbox info_checkbox = new Info_Checkbox();
public AdapterRecyFilterGroup(Context context, ArrayList 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 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}。