我试图在异步任务开始工作之前显示一个“加载”对话框。使用以下代码会发生什么,直到所有异步任务完成他的操作,对话框才会显示,对话框仅在最后提示。
这是代码:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_map);
loadMap();
progressBar = ProgressDialog.show(Map.this, "",
"Loading. Please wait...", true);
//firing the asynctask here
}
asynctask 正在执行相当繁重的操作,大约需要 10 秒才能看到布局,这就是为什么我想通过“加载”对话框提示用户。但由于某种原因,用户只能在 asynctask 操作结束时看到它。
我应该怎么办?
编辑:忘了提到在 onProgressUpdate 我正在做一些 UI 操作(将叠加层添加到地图视图)。这就是为什么用户界面可能会冻结的原因。但我只想知道如何在之前显示加载对话框,我不在乎 UI 在“加载”对话框显示后是否冻结。其实我很在意,但我不知道是否有更好的解决方案。
EDIT2:加载图功能:
public void loadMap()
{
mapView = (TapControlledMapView) findViewById(R.id.mapview);
mapView.setBuiltInZoomControls(true);
mapController = mapView.getController();
mapController.animateTo(new GeoPoint((int)(47.975 * 1E6), (int)(17.056 * 1E6)));
mapView.setOnSingleTapListener(new OnSingleTapListener() {
@Override
public boolean onSingleTap(MotionEvent e) {
itemizedOverlay.hideAllBalloons();
return true;
}
});
myLocationOverlay = new FixedMyLocationOverlay(this, mapView);
mapView.getOverlays().add(myLocationOverlay);
mapView.invalidate();
zoomToMyLocation();
editText = (EditText)findViewById(R.id.search);
editText.setOnFocusChangeListener(new OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if(hasFocus)
onSearchRequested();
EditText editText = (EditText)v;
editText.clearFocus();
}
});
}