我有一个覆盖扩展有2个对话作为私人属性 - 一个对话框和一个ProgressDialog。单击MapView中的叠加层后,将出现对话框对象。当用户单击对话框中的按钮时,它将消失,并显示ProgressDialog。同时通过通知正在运行的服务启动后台任务。任务完成后,将调用Overlay对象中的方法(buildingLoaded)以切换视图并关闭ProgressDialog。视图正在切换,代码正在运行(我使用调试器进行了检查),但ProgressDialog未被解除。我也尝试过hide()和cancel()方法,但没有任何效果。有人能帮助我吗? Android版本是2.2执行解除,隐藏或取消后ProgressDialog不会消失?
下面是代码:
public class LODOverlay extends Overlay implements OnClickListener {
private Dialog overlayDialog;
private ProgressDialog progressDialog;
..............
@Override
public void onClick(View view) {
.......
final Context ctx = view.getContext();
this.progressDialog = new ProgressDialog(ctx);
ListView lv = new ListView(ctx);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(ctx, R.layout.layerlist, names);
lv.setAdapter(adapter);
final LODOverlay obj = this;
lv.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
String name = ((TextView) view).getText().toString();
Intent getFloorIntent = new Intent(Map.RENDERER);
getFloorIntent.putExtra("type", "onGetBuildingLayer");
getFloorIntent.putExtra("id", name);
view.getContext().sendBroadcast(getFloorIntent);
overlayDialog.dismiss();
obj.waitingForLayer = name;
progressDialog.show(ctx, "Loading...", "Wait!!!");
}
});
.......
}
public void buildingLoaded(String id) {
if (null != this.progressDialog) {
if (id.equals(this.waitingForLayer)) {
this.progressDialog.hide();
this.progressDialog.dismiss();
............
Map.flipper.showNext(); // changes the view
}
}
}
}
您不会向我们展示您创建或显示overlayDialog的位置。你确定overlayDialog引用了显示的同一个对话框吗? – Falmarri 2011-01-06 19:13:57
你对线程也有点模糊。当你开始后台任务时,你在使用AsyncTask吗?调用`buildingLoaded`的`AsyncTask`是什么?那不行。 – 2011-01-06 19:20:24