每次网络呼叫后,RecyclerVIew项目都会重叠

时间:2016-11-28 12:15:02

标签: android android-recyclerview android-adapter

我在RecyclerView网络调用方法中使用适配器实现了onResponse的简单实现。如何删除所有以前的RecyclerView项或刷新RecyclerView

我使用了adapter.notifyDataSetChanged();recyclerView.invalidate();,但都没有使用过。

5 个答案:

答案 0 :(得分:0)

创建适配器的新实例,然后调用recyclerview.setAdapter(newAdapter);

这将删除旧的适配器并使用更新的项目设置新适配器。

如果您只想更新当前适配器中的项目,请在适配器内创建一个方法:

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

然后拨打adapter.addItems(moreItems);

答案 1 :(得分:0)

我建议你使用不同的方法

  1. 使用异步方法
  2. 使用变量对象数组,保存从该变量
  3. 中的网络调用获得的数据
  4. 每次调用新请求,清除变量,从该变量中的网络调用添加数据并刷新recyclerView

答案 2 :(得分:0)

OnResponse方法之外创建一次适配器。在适配器内部,有一个设置项目的方法,如:

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

然后,在onResponse方法中,您可以拨打adapter.setItems(items);

答案 3 :(得分:0)

您需要在调用notifyDataSetChanged()之前清除列表。

使用以下代码行

adapter.clearData();

不要忘记添加此方法

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

答案 4 :(得分:0)

以下步骤可以帮助您

  • 成功收到回复后,使用.clear()方法清除数据集。
  • 将新接收的数据添加到模型中。
  • 通知适配器。

建议 -

  • 每次收到数据后都不要实例化您的适配器。
  • 使用适配器内的公共方法执行此操作,同时添加数据。