如果用户长按列表项,我需要使用MapView显示活动。 这个过程需要一段时间,所以我想显示用户progressdialog,而应用程序挂起。 这是代码:
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吗?
UPD 即可。我在开始活动之前试图展示Toast。同样,仅在已显示地图时显示Toast。不明白会发生什么。如果我删除startActivity代码,则会立即显示Toast。
答案 0 :(得分:1)
您是否在MapView的onCreate()中进行了长度准备?你不应该因为它会阻止UI线程......
相反你应该做什么 - 在Map活动的onCreate()内部,你应该生成一个新的AsyncTask(理想情况下)并在那里显示进度条(并在显示进度条后立即退出onCreate())。然后在完成后的AsyncTask中(在postExecuted()中)你应该关闭进度对话框并显示你的地图。 PostExecuted()在UI线程中运行,因此您可以安全地关闭进度条。
你拥有的FC和可能的ANR(没有响应)都可能是因为你在UI线程中进行某些事情。您应该在UI线程中创建/关闭UI组件,并且您不应该在UI线程中运行lenghty操作。这是经验法则。