プライベート属性として 2 つのダイアログ (1 つのダイアログと 1 つの ProgressDialog) を持つオーバーレイ拡張があります。MapView でオーバーレイをクリックすると、Dialog オブジェクトが表示されます。ユーザーがダイアログ内のボタンをクリックすると、ボタンが消えて ProgressDialog が表示されます。同時に、実行中のサービスに通知することでバックグラウンド タスクが開始されます。タスクが完了すると、Overlay オブジェクトのメソッド (buildingLoaded) が呼び出されてビューが切り替わり、ProgressDialog が閉じられます。ビューが切り替えられ、コードが実行されています (デバッガーで確認しました) が、ProgressDialog は閉じられません。hide() メソッドと cancel() メソッドも試しましたが、何も機能しません。誰か助けてくれませんか?Android のバージョンは 2.2 です
コードは次のとおりです。
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
}
}
}
}