2016-11-28 70 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-

  • 不要实例化你的适配器,接收到数据后各一次。
  • 在适配器内部使用公共方法执行此操作,同时添加数据。
相关问题