【问题标题】:Hiding/Removing an ImageView from RecyclerView从 RecyclerView 隐藏/删除 ImageView
【发布时间】:2018-01-09 14:19:31
【问题描述】:

我有一个 RecyclerView,它从 ViewHolder 加载以下内容。

public class ViewHolder extends RecyclerView.ViewHolder {

    public ImageView imagePreviewOfEvent; 
    ...(other views)

    public ViewHolder(View itemView) {
        super(itemView);

        imagePreviewOfEvent = (ImageView) itemView.findViewById(R.id.listOfTimelinePostsPhotoContainer);
        ...(other views)
    }
}

我正在使用来自 JSON 请求的数据填充此 RecyclerView。数据中充满了帖子列表。有些帖子会有图片,但有些则没有(几乎就像 Twitter/Facebook 时间线,帖子可能有/可能没有照片)。

如果没有图像,则 JSON 返回“null”。在我的 RecyclerView 上,我想基于此从列表中的每一行中删除一个 ImageView。我尝试通过检查我存储的布尔状态来简单地删除视图:

if (timelineListInformation.getNeedsToRemoveImageView() == true) {
        holder.imagePreviewOfEvent.setVisibility(View.GONE);
    }

当我向下滚动列表并向上滚动时,与图像相关联的帖子将被删除。我一直在尝试查看各种答案,但没有找到任何答案。有什么想法吗?

【问题讨论】:

  • 你使用了timelineListInformation.get(position).getNeedsToRemoveImageView() 应该有这样的东西
  • 放置一个 else 块并将可见性设置为 VISIBLE。由于您的视图被回收,一旦您在该视图实例中隐藏 imageview,它就会一直隐藏,直到您再次使其可见。
  • 感谢大家的回复。 JudgedPluto 的答案非常完美!但是……这是最有效的方法吗?我不只是完成工作,而是试图了解最好的方法。如果是,那很好,如果不是,那我还能做什么?

标签: android json listview android-recyclerview


【解决方案1】:

试试这个。

holder.imagePreviewOfEvent.setVisibility(View.GONE);
if (timelineListInformation.getNeedsToRemoveImageView() == false) {
    holder.imagePreviewOfEvent.setVisibility(View.VISIBLE);
}

【讨论】:

  • 完美运行!很简单。谢谢你。只是出于兴趣……这是最有效的方法吗?我不只是完成工作,而是试图了解最好的方法。如果是,那很好,如果不是,那我还能做什么?
  • 其实这是最有效的方式。因为RecyclerView 如何回收视图,所以会有一些视图使用来自RecyclerView 中显示的其他一些项目的数据(即,将可见性设置为 GONE)。因此,当您每次将项目绑定到视图时,您应该重置视​​图中使用的数据。 holder.imagePreviewOfEvent.setVisibility(View.GONE); 可以解决问题,如果您想显示 ImageView,您可以检查条件,然后设置可见性。
  • 正确理解。非常感谢你。如此简单的事情,我错过了。我很担心这不是最好的方法,但似乎是:)。感谢您清除它!顺便说一句,我在 onBindViewHolder 方法中有这个,它应该放在哪里?
  • 你可以把它放在onBindViewHolder()。只需将其替换为您用于检查条件的代码即可。
【解决方案2】:

试试这个:

if (timelineListInformation.getNeedsToRemoveImageView() == true) {
    holder.imagePreviewOfEvent.setVisibility(View.GONE);
}else{
holder.imagePreviewOfEvent.setVisibility(View.VISIBLE);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多