java - Android - 具有一种布局、多个 setVisibility 的 RecyclerView

标签 java android android-recyclerview android-view visibility

我有一个基本上是多合一的布局,其中包含我的应用的主要提要所需的一切。所有可变项(图像、视频缩略图等)首先设置为 GONE,并在需要时设置为 VISIBLE

问题是有时,可能是由于 RecyclerView 的回收行为,应该是 GONE 的项目在 VISIBLE错误的地方。

示例:

Item no 1 contains Text

Item no 2 contains Image

Item no 3 contains Image

我一直向下滚动到第 x 项,然后向上滚动,这就是我得到的:

Item no 1 contains Image from item no x, sometimes item no 3

Item no 2 contains Image

Item no 3 contains Image

我正在使用自定义 ViewHolder,它扩展了 RecyclerView.ViewHolderCustomViewHolder 的目的是用于布局声明和初始化。

    ProgressBar progressBar;
    View viewDimmer;
    RelativeLayout postListWrapper;

    ...

    public ObjectViewHolder(View v) {
        super(v);
        progressBar = (ProgressBar)v.findViewById(R.id.post_inscroll_progressBar);
        viewDimmer = (View)v.findViewById(R.id.post_inscroll_viewDimmer);
        postListWrapper = (RelativeLayout)v.findViewById(R.id.post_inscroll_postListWrapper);
    }

我如何加载图像的示例:

Picasso.with(context)
    .load(youtubeThumbnailUrl)
    .fit()
    .centerCrop()
    .into(
        ((ObjectViewHolder) holder).userPostYoutubeImage
    );

如果没有从服务器获取 url,我已将每个可见性设置为 GONE

((ObjectViewHolder) holder).userPostImageWrapper.setVisibility(View.GONE);
((ObjectViewHolder) holder).userPostYoutubeImageWrapper.setVisibility(View.GONE);

但不知何故,图像仍然在以前的项目上重复使用(是的,不仅是项目 1)。有时图像也在错误的 ImageView 中。图片 D 应该在 ImageView D 中,但它在 ImageView A 中。

是否有关于设置 RecyclerView 并正常运行的指南?

如果我遗漏了什么,或者需要提供更多代码,请务必通知我 :D

最佳答案

您还需要添加 else 条件。就像下面的例子。

// if no url is found from server
if(url == null){
  ((ObjectViewHolder) holder).userPostImageWrapper.setVisibility(View.GONE);
  ((ObjectViewHolder) holder).userPostYoutubeImageWrapper.setVisibility(View.GONE);

} else {
  // Some url has found 
  ((ObjectViewHolder) holder).userPostImageWrapper.setVisibility(View.VISIBLE);
  ((ObjectViewHolder) holder).userPostYoutubeImageWrapper.setVisibility(View.VISIBLE);
}

如果您要在运行时设置它们的可见性,请对您作为列表项到达那里的每个项目执行此操作。

关于java - Android - 具有一种布局、多个 setVisibility 的 RecyclerView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36327049/

相关文章:

java - JAXB - 复合模式和@XmlValue

android - 制作自己的系统栏

android - 如何在Android的textview中换行

java - 从fragment添加到recyclerview并从recyclerview内部删除recyclerview

android - 将 float 操作按钮集成到带有工具栏的线性布局中

java - 无法使用 Android Studio 以编程方式为 View 设置 Id

java - 无法在Kotlin中解析字符串到文件

java - 同时更新两个相同的数据库模式

java - 如何创建 onitemclick 监听器以打开另一个 ListView

java - 如何在android中使用recyclerView传递id而不是位置