Android RecyclerView中的ViewHolder。适配器不特定于位置

Android RecyclerView中的ViewHolder。适配器不特定于位置,android,android-5.0-lollipop,android-recyclerview,android-viewholder,Android,Android 5.0 Lollipop,Android Recyclerview,Android Viewholder,以下是我的onBindViewHolder代码的一部分(在MyAdapter中扩展了RecyclerView.Adapter) 零件隐藏视图未按预期工作。 向下滚动时,视图工作正常。但是,当我开始向上滚动时,即重新查看以前的视图,虽然我检查了数据集并确认它没有被修改,但应该是可见的图像视图变成了不可见的图像视图。尝试调用视图上的其他方法也会给出不稳定的结果(数据集中的位置和项目不匹配) 视图持有者似乎没有绑定到RecyclerView中的特定位置 如果我删除隐藏视图部分,代码将按预期工作。 在我

以下是我的
onBindViewHolder
代码的一部分(在
MyAdapter中扩展了RecyclerView.Adapter

零件
隐藏视图
未按预期工作。 向下滚动时,视图工作正常。但是,当我开始向上滚动时,即重新查看以前的视图,虽然我检查了数据集并确认它没有被修改,但应该是可见的图像视图变成了不可见的图像视图。尝试调用视图上的其他方法也会给出不稳定的结果(数据集中的位置和项目不匹配)

视图持有者似乎没有绑定到RecyclerView中的特定位置

如果我删除
隐藏视图
部分,代码将按预期工作。 在我的例子中,有没有办法解决这个问题并动态隐藏视图


注意:我使用了一些异步任务来更新数据集并调用
notifyDataSetChanged()
,如果相关的话。

因为
RecyclerView
很好地使用了recycle,
ViewHolder
A可以用作
ViewHolder
B,因此,如果某些属性附加到错误的对象上,您需要指定
ViewHolder
的每个属性。

ViewHolder不应该特定于位置。也就是说,如果您有100个项目,则没有100个视图持有者。在适配器中重写bindView方法(我记不起确切名称)以更改位置的可见性。在
RecyclerView.adapter
中似乎找不到此类方法。谢谢。这很有效。可以进一步解释为什么会这样吗?视图持有者模式的实现就是这样。它每次都使用相同的视图,或者您可以重复使用视图,因此视图消失后仍将消失,这就是为什么您必须使其再次可见的原因。使用这些可重用视图有很多技巧,希望您在不久的将来能找到它们。我们面临着与@paradite类似的问题。在视图中有下载、取消按钮和进度条。在一个VH中关闭按钮后,后续视图持有者将随机显示/不显示按钮。虽然,我认为这是由于视图被回收造成的,但我无法找到解决方案。你的小费帮我省了很多时间。谢谢,干杯,伙计。你救了我的命
###This is the solution to your problem:###

holder.mImageViewContentPic.setVisibility(View.VISIBLE);
if(item.getContentDrawable() == null){
        holder.mImageViewContentPic.setVisibility(View.GONE);
    }
###This is the solution to your problem:###

holder.mImageViewContentPic.setVisibility(View.VISIBLE);
if(item.getContentDrawable() == null){
        holder.mImageViewContentPic.setVisibility(View.GONE);
    }