为了账号安全,请及时绑定邮箱和手机立即绑定

RecyclerView 没有更新 OnPostExecute() 上的项目

RecyclerView 没有更新 OnPostExecute() 上的项目

一只甜甜圈 2021-06-01 09:30:35
提前向在座的各位问好。在寻找问题的解决方案时,我一直在问题和疯狂之间徘徊,我已经投入了更多的时间来解决我的困境,现在我需要最了解该主题的人来帮助我。正如下面我详细,我在做什么,或者至少试图做的是更新RecyclerView而我收集的是被保存在特定数据DB,并在list of elements。我将在 中绘制的数据,我RecyclerView通过以下方式rssparser获取,首先获取链接列表,稍后使用Jsoup获取图像和新闻文本。碰巧这些使用与网络交互的函数必须在内部调用threads而不是 UI 的那些函数,很好,我相信我已经像多线程一样在那里创建了,并且很好的函数可以在我可以在一个异步任务。我需要的另一件事progress bubble是维护此视图中的 直到线程处理完成。理想情况下,它可以实时工作,我已经做到了,但是通过将每个新元素添加到列表中并通知适配器新插入的项目,它对我不起作用。任务结束时的处理,以及线程完成自己的工作,我不更新的RecyclerView有adapter.notifyDatasetChanged()两种,我不知道还有什么尝试,也许我有一些算法的错误。下面我要放我的代码,我为我的足迹道歉,当然我留下了一些不必要的代码或评论。
查看完整描述

2 回答

?
Cats萌萌

TA贡献1805条经验 获得超9个赞

您没有 在方法中更新任何适配器数据onPostExecute()并调用 notifyDatasetChanged


@Override

protected void onPostExecute(String result) {

   adapter.notifyDataSetChanged();

   isAlreadyRefresh = true;

   swipeView.setRefreshing(false);

}

adapter.notifyDatasetChanged() 仅在更新适配器数据时才需要调用。


我看到您已在onRefresh()方法中更新了您的适配器数据,但您还没有调用adapter.notifyDatasetChanged(). 所以你需要添加notifyDatasetChanged,如下面的代码所示。


@Override

public void onRefresh() {

    if (!isAlreadyRefresh) {

        swipeView.setRefreshing(true);

        swipeView.postDelayed(new Runnable() {

            @Override

            public void run() {

                fetchNews();

                isAlreadyRefresh = true;

                adapter.setmValues(news);

                adapter.notifyDatasetChanged() // <- Add this

            }

        }, 1000);

    } else

        swipeView.setRefreshing(false);

}

这可能是您RecyclerView未更新的原因之一


查看完整回答
反对 回复 2021-06-02
  • 2 回答
  • 0 关注
  • 113 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信