我的AsyncTaskLoader正在从远程服务器加载数据。当新数据到达时,自然会调用onLoadFinished
。此时我不知道如何将新数据提供给RecyclerView.Adapter
。调用notifyDataSetChanged
并不会为其提供新数据:它只是告诉它有新数据。那么关于我如何做到这一点的任何建议?现在,我能想到的最好的方法是在setData
的实现中创建我自己的RecyclerView.Adapter
方法
public void setData(List<MyObject> data){
if(null != data && !data.isEmpty()){
synchronized(mItems){
mItems.clear();
mItems.addAll(data);
}
notifyDataSetChanged();
}
}
我的想法是最好的吗?或者有更健全的方法吗?
答案 0 :(得分:1)
在适配器中公开一个公共方法来更新数据。
例如,你可以像这样把它放在
public void updateItems(ArrayList<MyObject> myObjects) {
this.data = myObjects;
notifyDataSetChanged();
}
答案 1 :(得分:0)
您有两种选择, 1.使用新数据重新实例化适配器并重置适配器。 2.你这样做的方式。
我想不出任何其他方法。
答案 2 :(得分:0)
好的,我遇到了同样的问题,这就是我所做的解决方案。 我从onLoadFinished传递了list对象,在RecyclerViewAdapter中我创建了方法名setCardInfoList(),然后我将这个对象传递给了我在适配器类中定义的全局List对象。
onLoadFinished方法..
@Override
public void onLoadFinished(android.content.Loader<List<Earthquake>> loader, List<Earthquake> earthquakes) {
if (earthquakes != null && !earthquakes.isEmpty()) {
adapter.setCardInfoList(earthquakes);
adapter.notifyDataSetChanged();
}else {
emptyView.setText("No Earthquake Found...");
}
}
内部适配器类
public void setCardInfoList(List<Earthquake> earthquakes){
this.earthquakeList = earthquakes;
}