我想在回收者视图的所有项目中显示所有复选框。当我长按它们时。我将在这张图片中向您展示我想做什么。
当我长按其他文件夹中的图片文件夹时,将出现一个空复选框,然后我们可以选择它们并对其执行所需的操作。最后,当我单击项目时,该怎么办?
这是我的适配器。
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 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管理可见性