Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/216.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 从recyclerview获取选中复选框列表_Android_Checkbox - Fatal编程技术网

Android 从recyclerview获取选中复选框列表

Android 从recyclerview获取选中复选框列表,android,checkbox,Android,Checkbox,我有一个包含许多复选框的Recyclerview。这些复选框来自API(文本和id复选框)。我想获取要发送到服务器的复选框的ID列表。我的解决方案之一是: 创建包含方法get和set的数据模型(Info_复选框) 身份证 创建ArrayList 将复选框id设置为此数组列表,并使用此数组 将参数发送到服务器 但是我的代码不正确!当我选中多个复选框时,数组列表会保存最后一个复选框id。您能说出其他解决方案或修复此错误吗 Context context; public ArrayList<In

我有一个包含许多复选框的Recyclerview。这些复选框来自API(文本和id复选框)。我想获取要发送到服务器的复选框的ID列表。我的解决方案之一是:

  • 创建包含方法get和set的数据模型(Info_复选框) 身份证
  • 创建ArrayList
  • 将复选框id设置为此数组列表,并使用此数组 将参数发送到服务器
  • 但是我的代码不正确!当我选中多个复选框时,数组列表会保存最后一个复选框id。您能说出其他解决方案或修复此错误吗

    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);