android - 如何修复:'notifyDataSetChanged() 未更新 RecyclerView 适配器中的 ImageView'
问题描述
假设我有一个 recyclerView 适配器,用于填充包括 imageView 在内的视图。当我第一次加载适配器时,回收站视图项目会正确显示。但是,如果我更新适配器数据源中的 imageView 和 textview 资源并调用 notifyDataSetChanged() 方法,那么只有 textview 得到更新,而不是 imageView 。谁能帮我这个 ?提前致谢 。
例如 - 这是我第一次在片段内的空数组列表中添加所有元素并使用 notifyDataSetChanged() 方法进行更新。到目前为止,一切都很好,图像在适配器中正确加载。
下面是getMethod()
if(remindersListResponse.code == 200)
{
if(remindersListResponse.data != null)
{
photoContactList.clear();
photoContactList.addAll(remindersListResponse.data);
photoContactsAdapter.notifyDataSetChanged();
}
}
现在,如果我在片段中单击某个按钮时再次调用 getMethod 并使用 notifyDataSetChanged() 方法。然后只有文本在适配器项目中得到更新,而不是图像而不是它们会消失。
这是我的适配器 onBindViewHolder(...) 方法
@Override
public void onBindViewHolder(@NonNull final ViewHolder viewHolder, int i) {
final PhotoContactsResponse.Result photoContactDetail = photoContactList.get(i);
viewHolder.photoContactName.setText(photoContactDetail.name);
if(photoContactDetail.image!=null && !photoContactDetail.image.isEmpty()) {
viewHolder.addPhotoText.setVisibility(View.GONE);
Picasso.with(context)
.load(Constants.WEB_SERVICE_BASE_URL_FOR_IMAGE+photoContactDetail.image)
.networkPolicy(NetworkPolicy.NO_CACHE)
.memoryPolicy(MemoryPolicy.NO_CACHE)
.into(viewHolder.photoContactImage);
}
else
{
viewHolder.addPhotoText.setVisibility(View.VISIBLE);
viewHolder.photoContactImage.setVisibility(View.GONE);
}
}
这是我的模型课
public static class Result{
public int id;
public String name;
public String number;
public String image;
public int index;
}
解决方案
我认为您忘记将 ImageView 设置为可见。当您将其隐藏在else
语句中时,您应该始终在图像可用时将其带回来。onBindViewHolder
仅将数据绑定到视图。Recycler 视图在方法调用之间被重用onBindViewHolder
。
@Override
public void onBindViewHolder(@NonNull final ViewHolder viewHolder, int i) {
final PhotoContactsResponse.Result photoContactDetail = photoContactList.get(i);
viewHolder.photoContactName.setText(photoContactDetail.name);
if(photoContactDetail.image!=null && !photoContactDetail.image.isEmpty()) {
viewHolder.addPhotoText.setVisibility(View.GONE);
viewHolder.photoContactImage.setVisibility(View.VISIBLE); // <== ADD THIS LINE
Picasso.with(context)
.load(Constants.WEB_SERVICE_BASE_URL_FOR_IMAGE+photoContactDetail.image)
.networkPolicy(NetworkPolicy.NO_CACHE)
.memoryPolicy(MemoryPolicy.NO_CACHE)
.into(viewHolder.photoContactImage);
}
else
{
viewHolder.addPhotoText.setVisibility(View.VISIBLE);
viewHolder.photoContactImage.setVisibility(View.GONE);
}
}
推荐阅读
- sql - 从具有唯一列并按日期、时间排序的 sqlite 中选择两列
- postgresql - Typeorm 迁移:没有唯一约束
- ios - 通过不同故事板、Swift、iOS、Xcode 上的 segue 和 Navigation 将数据从一个控制器传递到另一个控制器
- php - 以重力形式打印数组的特定字符串?
- python - pandas 子图/数据框 x 轴上的时间序列
- debian - 特定版本的 Debian 打包控制文件
- c++ - 为模板重载函数模板
班级 - javascript - 通过http调用获取配置后如何在angular 7中动态初始化firebase
- arrays - 数组中最后一个非零值
- python - 使用 spacy 偏移格式构建 GoldDoc 以使用 CLI 训练空白模型