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

问题描述 投票:0回答:1

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

enter image description here

enter image description here

当我长按其他文件夹中的图片文件夹时,将出现一个空复选框,然后我们可以选择它们并对其执行所需的操作。最后,当我单击项目时,该怎么办?

这是我的适配器。

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

}

java android android-recyclerview recycler-adapter
1个回答
1
投票

您可以尝试以下方法:

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

   //.....

 @Override
public void onBindViewHolder(@NonNull final NoteAdapter.MyView holder, final int position) {
    holder.note.setText(notes.get(position).note);
    holder.checkbox.setVisibility(checkedList.size() > 0 ? View.VISIBLE : View.GONE);
    holder.checkBox.setChecked(checkedList.contains(position));
    holder.itemView.setOnLongClickListener(new View.OnLongClickListener() {
        @Override
        public boolean onLongClick(View view) {
            if(checkedList.contains(position)){
                checkedList.remove(position);
                if (checkedList.size() == 0){
                    notifyDataSetChanged();
                }else {
                    notifyItemChanged(position);
                }
            }else {
                checkedList.add(position);
                if (checkedList.size() == 1){
                    notifyDataSetChanged();
                }else {
                    notifyItemChanged(position);
                }

            }
            //the code at the line up just set visible the selected item but i want to set visible all items check boxs
            return false;
        }
    });
    holder.checkBox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
            if(b){
                if(!checkedList.contains(position))
                   checkedList.add(position); 
            }else{
                checkedList.remove(position);
                if (checkedList.size() == 0){
                    notifyDataSetChanged();
                }
            }
        }
    });
}

   //.....
}

为所有项目添加布尔值。并使用OnLongClickListener管理可见性

© www.soinside.com 2019 - 2024. All rights reserved.