我有一個覆蓋擴展有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