Android Fragment加载Firebase数据时ProgressBar无法正常显示
实现加载阶段进度条显示的调整方案
现有逻辑的问题点
- 在
onViewCreated中直接硬编码将progressBar设为GONE,进度条在页面刚初始化完成就被隐藏,完全无法覆盖1-2秒的数据库拉取阶段。 - 没有将进度条的隐藏动作和真实的数据加载完成时机做绑定,逻辑和实际流程脱节。
代码调整步骤
- 删除
onViewCreated中提前隐藏进度条的代码
移除原有逻辑中的progressBar.setVisibility(View.GONE);这行代码,避免进度条被提前隐藏。 - 视图初始化时主动显示进度条
在onViewCreated获取到progressBar实例后,主动将其设为可见,保证每次进入Home页面时,加载反馈能正常展示:progressBar = view.findViewById(R.id.progressBarHome); progressBar.setVisibility(View.VISIBLE); - 绑定数据加载完成的回调触发隐藏动作
给对应的数据库引用加单次值监听,等首次全量数据拉取完成(和RecyclerView首次渲染的时机完全同步)后,再隐藏进度条,同时兼容加载失败的异常场景:mbase.addListenerForSingleValueEvent(new ValueEventListener() { @Override public void onDataChange(@NonNull DataSnapshot snapshot) { // 数据拉取成功,隐藏进度条 progressBar.setVisibility(View.GONE); } @Override public void onCancelled(@NonNull DatabaseError error) { // 拉取出错时同样隐藏进度条,可在此处补充Toast等错误提示 progressBar.setVisibility(View.GONE); } });
适配说明
- 该监听触发的时机和你当前使用的
FirebaseRecyclerAdapter的首次数据渲染时机完全匹配,不会出现进度条提前隐藏、列表仍在加载的体验问题。 - 如果后续需要补充下拉刷新、手动重拉数据的功能,只需要在触发重新加载动作时,再次将进度条设为
VISIBLE即可,回调逻辑可以直接复用。 - 不要在
onCreateView阶段操作进度条的可见性,该阶段视图还未完成全量绑定,容易触发空指针异常。
内容的提问来源于stack exchange,提问作者Maris Bogdan
相关产品推荐
相关产品推荐

