安卓RecyclerView加载API返回数据首次启动为空,是同步问题吗
问题根因
- API网络请求属于异步操作,不会阻塞
onCreate的执行流程:你在onCreate中完成RecyclerView初始化、Adapter绑定时,接口还没有返回结果,此时Adapter绑定的是初始空数据集,所以页面加载完成后RecyclerView无内容展示。 - 等待一段时间后接口请求完成,数据集已经更新到Adapter持有,但你没有主动通知RecyclerView刷新;点击按钮时你手动调用了
notifyDataSetChanged(),RecyclerView会重新读取当前Adapter的数据集完成渲染,所以内容正常展示。
修复方案
- 找到你
getCategories方法中的API请求成功回调逻辑 - 在回调中完成数据集赋值给Adapter的操作后,立刻在主线程调用Adapter的
notifyDataSetChanged()即可,不需要依赖按钮点击触发。
特殊说明:如果你的请求回调运行在子线程,必须先切到主线程再执行刷新操作,否则会触发调用线程异常,示例如下:
Kotlin版本:runOnUiThread { yourAdapter.notifyDataSetChanged() }Java版本:
runOnUiThread(new Runnable() { @Override public void run() { yourAdapter.notifyDataSetChanged(); } });
内容的提问来源于stack exchange,提问作者Hugo S M
相关产品推荐
相关产品推荐

