Java 如何在RecyclerView的所有项目中显示此复选框?

Java 如何在RecyclerView的所有项目中显示此复选框?,java,android,android-recyclerview,Java,Android,Android Recyclerview,我想在回收者视图的所有项目中显示所有复选框。当我长按他们。 我将在这张图片中向您展示我想要做的事情 当我长时间单击其他文件夹中的图片文件夹时,会出现一个空复选框,然后我们可以选择它们并对它们执行我们想要的操作。最后,当我点击这个项目时,我该怎么做 这是我的适配器 public class NoteAdapter extends Adapter<NoteAdapter.MyView> { List<Note> notes; Activity activity1; p

我想在回收者视图的所有项目中显示所有复选框。当我长按他们。 我将在这张图片中向您展示我想要做的事情

当我长时间单击其他文件夹中的图片文件夹时,会出现一个空复选框,然后我们可以选择它们并对它们执行我们想要的操作。最后,当我点击这个项目时,我该怎么做

这是我的适配器

public class NoteAdapter extends Adapter<NoteAdapter.MyView> {
List<Note> notes;
Activity activity1;


public NoteAdapter(List<Note> noteList, Activity activity) {
    activity1 = activity;
    notes = noteList;
}

@NonNull
@Override
public NoteAdapter.MyView onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    View itemView = LayoutInflater.from(parent.getContext()).inflate(R.layout.row_note, parent, false);
    return new MyView(itemView);
}

@Override
public void onBindViewHolder(@NonNull final NoteAdapter.MyView holder, final int position) {
    holder.note.setText(notes.get(position).note);
    holder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
        @Override
        public boolean onLongClick(View view) {
            holder.checkbox.setVisibility(View.VISIBLE);
            //the code at the line up just set visible the selected item but i want to set visible all items check boxs
            return false;
        }
    });
}

@Override
public int getItemCount() {
    return notes.size();
}

public class MyView extends RecyclerView.ViewHolder {
    private TextView name;
    private CheckBox checkBox;

    public MyView(@NonNull View itemView) {
        super(itemView);
        note = itemView.findViewById(R.id.note);
        chackbox = itemView.findViewById(R.id.chackBox);
    }
}
public类NoteAdapter扩展了适配器{
清单说明;
活动1;
公共记事本适配器(列表记事本列表,活动){
活动1=活动;
注释=注释列表;
}
@非空
@凌驾
public NoteAdapter.MyView onCreateViewHolder(@NonNull ViewGroup父级,int viewType){
View itemView=LayoutFlater.from(parent.getContext()).flate(R.layout.row\u注意,parent,false);
返回新的MyView(itemView);
}
@凌驾
public void onBindViewHolder(@NonNull final NoteAdapter.MyView holder,final int position){
holder.note.setText(notes.get(position.note));
holder.itemView.setOnLongClickListener(新视图.OnLongClickListener(){
@凌驾
仅长按公共布尔值(视图){
holder.checkbox.setVisibility(View.VISIBLE);
//行中的代码只是将所选项目设置为可见,但我想将所有项目设置为可见复选框
返回false;
}
});
}
@凌驾
public int getItemCount(){
returnnotes.size();
}
公共类MyView扩展了RecyclerView.ViewHolder{
私有文本视图名称;
私有复选框;
公共MyView(@NonNull View itemView){
超级(项目视图);
note=itemView.findViewById(R.id.note);
chackbox=itemView.findviewbyd(R.id.chackbox);
}
}
}您可以尝试以下方法:

public class NoteAdapter extends RecyclerView.Adapter<NoteAdapter.MyView> {
List< Note > notes;
Activity activity1;
ArrayList<Integer> checkedList = new ArrayList<>();
RecyclerView recyclerView;

//.....

@Override
public void onAttachedToRecyclerView(@NonNull RecyclerView recyclerView) {
    super.onAttachedToRecyclerView(recyclerView);
    this.recyclerView = recyclerView;
}

@Override
public void onBindViewHolder(@NonNull final NoteAdapter.MyView holder, final int position) {
    holder.name.setText(notes.get(position).note);
    holder.checkBox.setVisibility(checkedList.size() > 0 ? View.VISIBLE : View.GONE);
    holder.checkBox.setChecked(checkedList.contains(position));

}

//......

public class MyView extends RecyclerView.ViewHolder {
    private TextView name;
    private CheckBox checkBox;

    public MyView(@NonNull View itemView) {
        super(itemView);
        name = itemView.findViewById(R.id.name);
        checkBox = itemView.findViewById(R.id.checkBox);

        itemView.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View view) {
                if(checkedList.contains(getAdapterPosition())){
                    checkedList.remove(Integer.valueOf(getAdapterPosition()));
                    if (checkedList.size() == 0){
                        notifyDataSetChanged();
                    }else {
                        notifyItemChanged(getAdapterPosition());
                    }
                }else {
                    checkedList.add(getAdapterPosition());
                    if (checkedList.size() == 1){
                        recyclerView.post(new Runnable()
                        {
                            @Override
                            public void run() {
                                notifyDataSetChanged();
                            }
                        });
                    }else {
                        notifyItemChanged(getAdapterPosition());
                    }

                }
                //the code at the line up just set visible the selected item but i want to set visible all items check boxs
                return false;
            }
        });
        checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
                if(b){
                    if(!checkedList.contains(getAdapterPosition()))
                        checkedList.add(getAdapterPosition());
                }else{
                    checkedList.remove(Integer.valueOf(getAdapterPosition()));
                    if (checkedList.size() == 0){
                        recyclerView.post(new Runnable()
                        {
                            @Override
                            public void run() {
                                notifyDataSetChanged();
                            }
                        });
                    }
                }
            }
        });
    }
  }
}
公共类NoteAdapter扩展了RecyclerView.Adapter{ 列出注释; 活动1; ArrayList checkedList=新建ArrayList(); 回收视图回收视图; //..... @凌驾 公共无效onAttachedToRecyclerView(@NonNull RecyclerView RecyclerView){ super.onAttachedToRecyclerView(recyclerView); this.recyclerView=recyclerView; } @凌驾 public void onBindViewHolder(@NonNull final NoteAdapter.MyView holder,final int position){ holder.name.setText(notes.get(position.note)); holder.checkBox.setVisibility(checkedList.size()>0?View.VISIBLE:View.GONE); holder.checkBox.setChecked(checkedList.contains(position)); } //...... 公共类MyView扩展了RecyclerView.ViewHolder{ 私有文本视图名称; 私有复选框; 公共MyView(@NonNull View itemView){ 超级(项目视图); name=itemView.findviewbyd(R.id.name); checkBox=itemView.findviewbyd(R.id.checkBox); itemView.setOnLongClickListener(新视图.OnLongClickListener(){ @凌驾 仅长按公共布尔值(视图){ if(checkedList.contains(getAdapterPosition())){ checkedList.remove(Integer.valueOf(getAdapterPosition()); if(checkedList.size()==0){ notifyDataSetChanged(); }否则{ notifyItemChanged(getAdapterPosition()); } }否则{ 添加(getAdapterPosition()); if(checkedList.size()==1){ recyclerView.post(新的Runnable() { @凌驾 公开募捐{ notifyDataSetChanged(); } }); }否则{ notifyItemChanged(getAdapterPosition()); } } //行中的代码只是将所选项目设置为可见,但我想将所有项目设置为可见复选框 返回false; } }); setOnCheckedChangeListener(新建CompoundButton.OnCheckedChangeListener(){ @凌驾 检查更改后的公共无效(复合按钮复合按钮,布尔b){ 如果(b){ 如果(!checkedList.contains(getAdapterPosition())) 添加(getAdapterPosition()); }否则{ checkedList.remove(Integer.valueOf(getAdapterPosition()); if(checkedList.size()==0){ recyclerView.post(新的Runnable() { @凌驾 公开募捐{ notifyDataSetChanged(); } }); } } } }); } } } 我在MyView中添加了长单击方法,并做了一些更改。它工作更稳定。onBind方法中存在位置错误


OnAttachedToRecycleView:有时notifyDataSetChanged()方法会给出错误。我添加了可以使用recyclerView的功能,将图像添加到您的问题中,而不是作为链接,还可以添加适配器代码。只需在适配器中单击“仅添加”即可!我知道如何只长按一下就添加,但我无法将所有可见复选框设置为所有项目首先谢谢allVisible=!全可见;然后我想勾选我长时间单击的位置的复选框,但在这项工作中,我只是使它们可见。请参阅我长时间单击图片文件夹时发送的第二张图像,所有复选框都变为可见,并且图片复选框也被选中。我编辑了答案。你可以这样做。是的,它不起作用。我现在测试它,当我长时间点击第三个项目时,它们都变为可见,第一个项目将检查。当我长时间单击第六个项目时,第四个位置的项目将被选中。我不知道为什么会发生这种情况。我尝试了另一种方法。你能试试这个吗?这样,,