2015-09-06 29 views
1

我的AsyncTaskLoader正在从远程服务器加载数据。当新数据到达时,自然会拨打onLoadFinished。此时我不知道如何将新数据提供给RecyclerView.Adapter。拨打电话notifyDataSetChanged并没有给它新的数据:它只是告诉它有新的数据。所以,关于我如何做到这一点的任何建议?现在我能想到的最好的就是我在执行的RecyclerView.Adapter创建自己的setData方法如何从AsyncTaskLoader向RecyclerView Adapter提供新数据

public void setData(List<MyObject> data){ 
    if(null != data && !data.isEmpty()){ 
     synchronized(mItems){ 
     mItems.clear(); 
     mItems.addAll(data); 
     } 
     notifyDataSetChanged(); 
    } 
    } 

是我的思路是最好的?还是有更好的方法来做到这一点?

+1

我个人也是这样。我把一个方法更新我的数据到我的适配器,然后调用notifyDataSetChanged。 – xiaomi

+1

即使在BaseAdapter时代也是如此,我在改变底层数据集的时候使用了这条路线,只是调用了notifyDataSetChanged()。 – deubaka

回答

0

你有两个选择, 1.重新用新的数据实例化适配器和复位适配器。 2.你这样做的方式。

我想不出任何其他方法。

1

在您的适配器中公开一个公共方法来更新数据。

例如,你可以把它像这样

public void updateItems(ArrayList<MyObject> myObjects) { 
    this.data = myObjects; 
    notifyDataSetChanged(); 
} 
0

好吧,我有同样的问题,这里是我做的解决方案。 1st我从onLoadFinished传递了列表对象,并在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; 
} 
相关问题