【问题标题】:How to display ProgressDialog when preparing to show another activity?准备显示另一个活动时如何显示 ProgressDialog?
【发布时间】:2011-07-03 14:40:04
【问题描述】:

如果用户长按列表项,我需要使用 MapView 显示活动。 这个过程需要一段时间,所以我想在应用程序挂起时显示用户进度对话框。 代码如下:

ListView listView = (ListView) findViewById(android.R.id.list);
listView.setOnItemLongClickListener (new OnItemLongClickListener() {
public boolean onItemLongClick(AdapterView parent, View view, int position, long id) {
...
  ProgressDialog dialog = ProgressDialog.show(getApplicationContext(), "", "Loading. Please wait...", true);
  Intent intent = new Intent(getBaseContext(), Map.class);
  startActivity(intent);

我选择了正确的方法吗?现在获取不同的 FC(取决于为 ProgressDialog 选择的上下文)。我的场景中可以显示 ProgressBar 吗?

更新。我试图在开始活动之前展示 Toast。同样,Toast 仅在 Map 已显示时才显示。不明白会发生什么。如果我删除 startActivity 代码,则立即显示 Toast。

【问题讨论】:

    标签: android dialog progressdialog android-progressbar


    【解决方案1】:

    您是否在 MapView 的 onCreate() 中进行了冗长的准备工作?你不应该因为它会阻塞 UI 线程......

    您应该做的是 - 在 Map 活动的 onCreate() 内部,您应该生成一个新的 AsyncTask(理想情况下)并在那里显示进度条(并在显示进度条后立即退出 onCreate())。然后在 AsyncTask 完成后(在 postExecuted() 中),您应该关闭进度对话框并显示您的地图。 PostExecuted() 在 UI 线程中运行,因此您可以安全地关闭进度条。

    您拥有的 FC 和可能的 ANR(未响应)都可能出现,因为您在 UI 线程中/外执行某些操作。你应该在 UI 线程中创建/关闭你的 UI 组件,并且你不应该在 UI 线程中运行冗长的操作。这是经验法则。

    【讨论】:

    • 感谢您的回复。实际上,如果我在 onCreate() 上什么都不做,只是显示地图 - 它仍然会挂起一段时间。看起来加载地图活动本身需要很多时间。我应该尝试在 ASyncTask 中启动该活动吗?
    • 好的,使用 ASyncTask 有帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-12-14
    • 1970-01-01
    • 2013-06-12
    • 1970-01-01
    • 2013-08-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多