我有一个包含一些物品的RecyclerView。每个项目都显示一个事件,它将有一个文本视图,表示当前时间和事件时间之间的时间差。我希望每秒或每分钟不断更新项目(只需要将项目重新绑定到视图持有者)。我使用以下代码,但它不更新所有项目(只是其中一些和更新的项目,甚至闪存,看起来不太好)。
LinearLayoutManager layoutManager = (LinearLayoutManager) mRecyclerView.getLayoutManager();
int firstVisibleItem = layoutManager.findFirstVisibleItemPosition();
int lastVisibleItem = layoutManager.findLastVisibleItemPosition();
Log.d(TAG, "Updating clock: " + firstVisibleItem + ", " + lastVisibleItem);
if (firstVisibleItem > 0 && lastVisibleItem > 0) {
for (int i = firstVisibleItem; i <= lastVisibleItem; i++) {
mAgendaAdapter.notifyItemChanged(i);
}
此问题是否有解决方法?
答案 0 :(得分:2)
您看到的Flash是项目更改的默认动画。 你应该可以用 -
之类的东西来禁用它recyclerView.getItemAnimator().setSupportsChangeAnimations(false);
如果您想要更新所有项目,请致电
mAgendaAdapter.notifyDataSetChanged()
答案 1 :(得分:1)
在这里您只需通知可见项目,但我们需要通知所有人。 只需更新 Adapter 中使用的List来绑定数据。
mAgendaAdapter.notifyDataSetChanged()
或者您可以跟踪更改的项目并循环浏览并调用
mAgendaAdapter.notifyItemChanged(i);