2016-11-28 71 views
0

我有一個簡單的實施RecyclerViewonResponse網絡調用方法中的適配器。如何刪除以前的所有RecyclerView項目或刷新RecyclerViewRecyclerVIew項在每個網絡調用後重疊

我已經使用adapter.notifyDataSetChanged();recyclerView.invalidate();但他們都沒有工作。

+0

在添加新項目之前,您是否清除了數據列表? – SaNtoRiaN

+0

一旦下一組數據通過onRespose回調來保存數據列表,然後調用adapter.notifyDataSetChanged()。 –

回答

0

創建適配器的新實例,然後調用recyclerview.setAdapter(newAdapter);

這將刪除舊的適配器和設置新的適配器與更新的項目。

如果你只是想更新當前適配器項目,然後創建您轉接器內的方法來做到這一點:

public void addItems(ArrayList<EventObject> eventList) { 
    this.eventList.addAll(eventList); 
    notifyDataSetChanged(); 
} 

然後調用adapter.addItems(moreItems);

+0

僅僅重置數據源並調用notifyDataSetChanged()而不是創建對象的新實例會不會更高效? –

+0

是的,我把它放在我的編輯@NileshSingh中 – MichaelStoddart

0

我會建議你使用不同的方法

  1. 使用異步方法
  2. 使用可變對象的哪個數組,保存你得到數據從網絡調用該變量
  3. 每個
  4. 你調用一個新的請求,清除變量,從網絡調用該變量添加數據並刷新recyclerView
0

創建您的適配器一次,你OnResponse方法之外。適配器內部,有一個方法來設置的項目,如:

public void setItems(ArrayList<MyObject> items){ 
    this.items = items; 
    notifyDataSetChanged(); 
} 

然後在您的onResponse方法你可以叫adapter.setItems(items);

0

你需要調用notifyDataSetChanged之前清除列表()。

使用下面的代碼行

adapter.clearData(); 

不要忘了添加此方法

public void clearData() { 
    int size = this.myList.size(); 
    this.myList.clear(); 
    this.notifyItemRangeRemoved(0, size); 
    } 
} 
0

以下步驟將幫助您

  • 後成功接收響應,清除數據集使用.clear()方法。
  • 將新收到的數據添加到模型中。
  • 通知適配器。

Suggestion-

  • 不要實例化你的適配器,接收到數據後各一次。
  • 在適配器內部使用公共方法執行此操作,同時添加數據。
相關問題