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