我有一个不更新的Recyclerview,我不确定原因:
在我的主片段中,我在oncreateview中获取了我的recyclerview的数据,如下所示:
alarms = AlarmCollection.getAlarms(getActivity());
然后我像这样设置适配器:
// Adapter
adapter = new AlarmsAdapter(getActivity(), alarms);
rv.setAdapter(adapter);
然后我在timertask / runnable上重置数据以更新recyclerview上的值(它们是警报,因此它们每分钟更改一次)。
这是通过简单的notify datasetchanged:
完成的adapter.notifyDataSetChanged();
问题是如上所示,我通过AlarmCollection加载数据。这是从共享首选项中获取列表。
但是当我调用通知数据集时,不再调用它。
我的印象是,当你在recyclerview上调用notify ect时它会更新列表还是pureley更新视图?
答案 0 :(得分:2)
正如@GpRyan所提到的,问题出在这一行:
alarms = AlarmCollection.getAlarms(getActivity());
每次创建alarms
的新实例时。但适配器正在查找您传递给它的alarms
实例中的更改。所以它不会起作用。
您应该做的是从alarms
删除所有项目并重新添加新数据。
alarms.removeAll();
alarms.addAll(AlarmCollection.getAlarms(getActivity()));
adapter.notifyDataSetChanged();
注意:更新主线程中的
alarms
。有一次,我理解在另一个线程中更新数据集需要很长时间 不适用于适配器。
答案 1 :(得分:0)
如果您的getItemCount()
返回0,那么notifyDataSetChanged()
将无法执行任何操作。
确保在getItemCount()
适配器中添加了RecyclerView
。
@Override
public int getItemCount() {
return alarms.size();
}
编辑:您还可以使用notifyitemrangechanged
adapter.notifyItemRangeChanged(0,alarms.size());
答案 2 :(得分:0)
notifyDataSetChanged()
仅更新视图。通常情况下,您修改适配器保存的数据后调用notifyDataSetChanged()
(在您的情况下为alarms
。
所以你应该做的是:在你的计时器任务/ runnable中更新alarms
,然后调用notifyDataSetChanged()