在回收者视图项目中动态完成后,视图不会隐藏

时间:2019-06-27 12:01:39

标签: android

我正在使用RecyclerView列出项目,并在每个列表中显示动态Visible/Gone的图像。我正在使用View.GONE隐藏视图。

在应该隐藏图像的情况下,它并不总是起作用。它仍然显示在屏幕上,并且还在调试模式下,我已经检查了该文件,并且在获取 image.getVisiblity()为我提供了int值"8",这意味着视图为Gone,但我仍然可以在该列表中看到该图像。 它只是有时发生。

然后我尝试使用View.INVISIBLE,它一直在工作,但是它占用了版面中的空间,正如预期的那样

我正在使用sparseArray存储所有holders classes。我在Adapter中编写了一个方法,并从活动中调用了该方法。我试图隐藏replayIcon视图

public void handleReplayButton(int pos,Boolean isDisplay) {

   Holder holder = holderSparseArray.get(pos);

   if(holder != null) {
       if (isDisplay != null && isDisplay == true) {
           holder.playIcon.setVisibility(View.GONE);
           holder.pauseIcon.setVisibility(View.GONE);
           holder.replayIcon.setVisibility(View.VISIBLE);
       } else if(isDisplay != null && isDisplay == false) {
           holder.playIcon.setVisibility(View.VISIBLE);
           holder.pauseIcon.setVisibility(View.GONE);
           holder.replayIcon.setVisibility(View.GONE);
       } else {
           holder.playIcon.setVisibility(View.GONE);
           holder.pauseIcon.setVisibility(View.VISIBLE);
           holder.replayIcon.setVisibility(View.GONE);
       }
   }

}

这是我想要的最后一个else statement,它将视图设置为GONE。当我调用holder.replayIcon.getVisibility()时,它给了我int 8,但仍然可以看到该图标

3 个答案:

答案 0 :(得分:0)

您将必须致电notifyDataSetChanged()来刷新“回收者”视图中的列表。

但是由于您必须删除某项,因此您也可以使用notifyItemRemoved

此外,如果您正在使用setVisibility()方法来隐藏视图,请确保还对有效项目将视图设置为可见,因为这些项目已在回收者视图中重复使用。

更多信息:https://developer.android.com/reference/android/support/v7/widget/RecyclerView.Adapter

答案 1 :(得分:0)

尝试在一条语句的末尾调用invisible,使它可见,反之亦然。

您也可以尝试放置notifydatasetchanged()。

答案 2 :(得分:0)

如果您要调用 notifyDataSetChanged()-它会更新列表中的所有项目。 如果您需要按索引更新特殊项目,请不要这样做,因为重新绘制所有视图会占用大量内存。

就像人们在使用 notifyItemChanged(),notifyItemInserted()或notifyItemRemoved()之前写的那样。

如果要更新情侣视图,可以使用 notifyItemRangeChanged(),notifyItemRangeRemoved()或notifyItemRangeInserted()

You can read more about it here

还有一种方法。您可以使用 DiffUtils 回调。

已经可以使用动画了。

DiffUtils Calbacks