2015-09-06 62 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; 
} 
相關問題