Android 从recyclerview获取选中复选框列表
我有一个包含许多复选框的Recyclerview。这些复选框来自API(文本和id复选框)。我想获取要发送到服务器的复选框的ID列表。我的解决方案之一是:Android 从recyclerview获取选中复选框列表,android,checkbox,Android,Checkbox,我有一个包含许多复选框的Recyclerview。这些复选框来自API(文本和id复选框)。我想获取要发送到服务器的复选框的ID列表。我的解决方案之一是: 创建包含方法get和set的数据模型(Info_复选框) 身份证 创建ArrayList 将复选框id设置为此数组列表,并使用此数组 将参数发送到服务器 但是我的代码不正确!当我选中多个复选框时,数组列表会保存最后一个复选框id。您能说出其他解决方案或修复此错误吗 Context context; public ArrayList<In
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();
}
});
}
}
语境;
public ArrayList items=new ArrayList();
public SparseBooleanArray=新SparseBooleanArray();
公共ArrayList复选框=新建ArrayList();
私有信息复选框信息复选框=新信息复选框();
公共适配器RecyFilterGroup(上下文、ArrayList项){
this.context=上下文;
这个项目=项目;
}
@非空
@凌驾
public SetViewHolderFilter onCreateViewHolder(@NonNull ViewGroup ViewGroup,int i){
View=LayoutFlater.from(viewGroup.getContext())
.充气(R.layout.sample\u filter\u分组,viewGroup,false);
返回新的SetViewHolderFilter(视图);
}
@凌驾
BindViewHolder上的公共无效(@NonNull SetViewHolderFilter SetViewHolderFilter,int i){
setViewHolderFilter.checkBox.setText(items.get(i.getName());
if(array.get(i)){
setViewHolderFilter.checkBox.setChecked(true);
}否则{
setViewHolderFilter.checkBox.setChecked(false);
}
}
@凌驾
public int getItemCount(){
return items==null?0:items.size();
}
公共类SetViewHolderFilter扩展了RecyclerView.ViewHolder{
复选框;
public SetViewHolderFilter(@NonNull final View itemView){
超级(项目视图);
复选框=itemView.findViewById(R.id.cb_过滤器);
checkBox.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
如果(array.get(getAdapterPosition()){/!已选中
put(getAdapterPosition(),false);
info_checkbox.setId(items.get(getAdapterPosition()).getId());
复选框。删除(信息复选框);
}否则{//已检查
put(getAdapterPosition(),true);
info_checkbox.setId(items.get(getAdapterPosition()).getId());
复选框。添加(信息复选框);
}
notifyDataSetChanged();
}
});
}
}
您必须在信息过滤器类中创建一个布尔变量,选中复选框时,将布尔变量值设置为true;取消选中复选框时,将该特定位置的布尔变量值更改为false,在这之后,当你需要时,你可以得到多少布尔变量是真的,多少是假的,然后你可以得到准确的项目,多少检查与否。这应该可以做到:
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);
}
}
});
现在您可以在items ArrayList中选中list复选框,您可以执行任何操作 你应该使用复选框。添加(items.get(getAdapterPosition()).getId());复选框。删除(items.get(getAdapterPosition()).getId());
setViewHolderFilter.checkBtn.setChecked(list.get(position).isChecked);