实时更新RecyclerView的方法是什么?

6

我有一个列表,可以由任何用户随时更新。该列表在RecyclerView中显示。我希望实时更新此列表,使用户能够获得更好的用户体验,因为用户不需要多次执行刷新操作。现在问题是,我如何实时更新此列表?


依赖于:你的数据来自哪里? - Hadi Satrio
2
你可以直接调用以下代码来刷新适配器:yourAdapter.notifyDataSetChanged(); - Ahmed Abidi
数据来自Web服务。我必须先更新数据。我如何实时与Web服务通信?Hadi Satrio - Ali Ahmed
1
与Web服务通信和更新RecyclerView是两个不同的问题。您需要一种不同的策略来检索数据。最简单的方法是每隔x秒轮询,但如果有许多客户端,则可能会对Web服务器造成负担。您可以使用长轮询来保持与Web服务器的连接,但这对移动客户端并不理想。另一种方法是使用推送通知仅发送更改的数据。 - Gary Bak
如果我每隔x秒轮询一次,会不会有电池耗尽的问题?Gary Bak - Ali Ahmed
@AliAhmed,你有这个问题的解决方案吗?这对我很有帮助。 - sejn
3个回答

7
使用RecyclerView,您可以使用适配器更新单个项目、项目范围或整个列表。
您必须使用RecyclerView适配器的方法,如adapter#notifyItem***或adapter#notifyDataSetChanged()(这将更新RecyclerView中所有项目的列表)。
class RVAdapter extends ...{ 
   List<?> itemList;

public void updateList (List<Object> items) {
        if (items != null && items.size() > 0) {
            itemList.clear();
            itemList.addAll(items);
            notifyDataSetChanged();
        }
    }

}

但是数据来自Web服务。我必须先更新数据。我如何实时与Web服务通信? - Ali Ahmed
你必须解析数据并将其存储在List <?>中。这样,您就可以将传递给RecyclerView的List <?>与从Web服务获得的新List <?>进行交换。 - Mohammed Rampurawala

1
你可以在适配器内创建一个方法来更新数据并刷新你的RecyclerView。
class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.ViewHolder>{
   List<Data> data;
   ...

 public void update(ArrayList<Data> datas){
    data.clear();
    data.addAll(datas);
    notifyDataSetChanged();
 }
    ...
}

只需要调用更新方法并传入新数据。就是这样。


0

您可以调用相同的设置回收器适配器代码。 不要忘记调用adapter#notifyDataSetChanged()


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接