通知数据集已更改,未获取recyclerview

时间:2016-09-24 04:20:22

标签: android android-recyclerview notifydatasetchanged

我有一个不更新的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更新视图?

3 个答案:

答案 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()