【问题标题】:ProgressDialog freezes while retrieve data from Firebase/Firestore从 Firebase/Firestore 检索数据时 ProgressDialog 冻结
【发布时间】:2018-10-15 06:27:47
【问题描述】:

我使用 MVP。我在视图中显示和关闭进度对话框,并在演示者中从 firebase/firestore 检索数据,使用回调将数据传递给视图。

但加载数据时,进度对话框在 UI 中冻结。 从 firebase/firestore 获取数据时,有什么方法可以让进度对话框保持旋转?

在视图中显示对话框:

progressDialog = Utils.showProgressDialog(getContext(), getString(R.string.progress_msg_loading));
menuListPresenter.getMenuList(currentStore.getId());

在presenter中加载数据:

@Override
public void getMenuList(String companyId) {
    this.companyId = companyId;
    if (Utils.isNullOrEmpty(companyId)) {
        view.onError(Constants.EMPTY_FIRESTORE_RESULT);
    } else {
        DocSnippets.getInstance().listenProductStatus(companyId, this);
    }
}

传递数据以在演示者中查看:

@Override
public void onProductStatusChanged(ArrayList<Product> products) {
    if (products != null && products.size() > 0) {
        view.menuOnChanged(products);
    }
}

关闭视图中的对话框:

@Override
public void menuOnChanged(ArrayList<Product> products) {
    if (progressDialog != null && progressDialog.isShowing()) progressDialog.dismiss();
    // other code
}

【问题讨论】:

  • 请添加您的代码以期待您的问题得到解答。
  • 在另一个线程中加载数据
  • @PradyumanDixit 我添加了我的代码
  • @kate 你用的是什么适配器?
  • @AlexMamo ArrayAdapter,我使用se.emilsjolander.stickylistheaders.ExpandableStickyListHeadersListView这个库,所以适配器实现了StickyListHeadersAdapter

标签: android firebase google-cloud-firestore progressdialog


【解决方案1】:

我认为您应该在处理结果时在 Presenter 中使用后台线程。

您应该在演示者发送的视图侧更新上使用runOnUiThread() 方法。这只是为此建议的方式。

【讨论】:

  • 我使用 AsyncTask.execute 在 Presenter 中启动后台线程,并使用 Handler 在视图中的 UI 线程中显示/关闭进度对话框,进度对话框仍然冻结。不过速度好像更快了
猜你喜欢
  • 1970-01-01
  • 2023-03-09
  • 2021-02-16
  • 1970-01-01
  • 1970-01-01
  • 2018-08-19
  • 2016-08-07
  • 1970-01-01
  • 2021-05-27
相关资源
最近更新 更多