要解决Android RecyclerView与ViewBinding中notifyItemChanged仅第一次有效的问题,可以按照以下步骤进行操作:
public class MyAdapter extends RecyclerView.Adapter {
private List mDataList;
private LayoutInflater mInflater;
public MyAdapter(Context context, List dataList) {
mInflater = LayoutInflater.from(context);
mDataList = dataList;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
// 使用ViewBinding.inflate方法绑定item视图
ItemLayoutBinding binding = ItemLayoutBinding.inflate(mInflater, parent, false);
return new ViewHolder(binding);
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
DataItem item = mDataList.get(position);
// 设置item视图的数据
holder.binding.textView.setText(item.getText());
}
@Override
public int getItemCount() {
return mDataList.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
// 声明ViewBinding对象
ItemLayoutBinding binding;
public ViewHolder(@NonNull ItemLayoutBinding binding) {
super(binding.getRoot());
this.binding = binding;
}
}
}
public class DataItem {
private int id;
private String text;
public DataItem(int id, String text) {
this.id = id;
this.text = text;
}
public int getId() {
return id;
}
public String getText() {
return text;
}
}
@Override
public long getItemId(int position) {
return mDataList.get(position).getId();
}
// 在RecyclerView的Adapter中启用稳定的item标识符
setHasStableIds(true);
现在,当调用notifyItemChanged方法时,RecyclerView会根据item的唯一标识符来刷新相应的item视图。这样,notifyItemChanged就会对每个item都有效,而不仅仅是第一次。