如何从AsyncTaskLoader中为RecyclerView Adapter提供新数据

时间:2015-09-06 01:51:00

标签: android android-recyclerview asynctaskloader

我的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();
    }
  }

我的想法是最好的吗?或者有更健全的方法吗?

3 个答案:

答案 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;
}