1

如果用户长按列表项,我需要使用 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。

4

1 回答 1

1

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

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

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

于 2011-07-03T14:46:58.873 回答