java - 如何在 RecyclerView 的所有项目中显示此复选框?
问题描述
我想在回收站视图的所有项目中显示所有复选框。当我长按它们时。我会告诉你我想在这张图片中做什么。
当我长按其他文件夹中的图片文件夹时,将出现一个空复选框,然后我们可以选择它们并为它们做我们想做的事情。最后,当我单击项目并发生这种情况时,我该怎么做。
这是我的适配器。
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 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();
}
});
}
}
}
});
}
}
}
我在 MyView 中添加了长按方法并进行了一些更改。它工作更稳定。onBind方法中存在位置错误。
onAttachedToRecyclerView:有时notifyDataSetChanged()方法会出错。我添加了能够使用 recyclerView
推荐阅读
- elasticsearch - logstash 提取嵌套字段并将其移动到新的父字段中
- java - 项目基目录之外的目录。Maven 战争插件 -
- unity3d - VR Cardboard SDK 1.120 和 Unity 2017.3:如何检测磁铁触发器?
- vba - 添加对使用带有编号的项目宏的正则表达式找到的数字或文本的交叉引用
- ios - ContainerViewController 中的 Item 是什么
- php - Prestashop 1.7 搜索引擎的修改,'-' '' 字符,
- java - Spring Boot 默认异常映射到标准 HTTP 状态码
- javascript - Sequelize,findOrCreate后获取id
- python - 数据框字典中列的总和
- java - JSplitPane 中如何动态改变组件