我正在使用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,但仍然可以看到该图标
答案 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 回调。
已经可以使用动画了。