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