Ich habe eine Overlay-Erweiterung, die zwei Dialoge als private Attribute hat - einen Dialog und einen ProgressDialog. Nach dem Klicken auf die Überlagerung in der MapView wird das Dialogfeld Objekt angezeigt. Wenn der Benutzer auf eine Schaltfläche im Dialog klickt, verschwindet er und der ProgressDialog wird angezeigt. Gleichzeitig wird eine Hintergrundaufgabe gestartet, indem ein laufender Dienst benachrichtigt wird. Wenn die Aufgabe erledigt ist, wird eine Methode (buildingLoaded) im Overlay-Objekt aufgerufen, um die Ansicht zu wechseln und den ProgressDialog zu schließen. Die Ansicht wird umgeschaltet, der Code wird ausgeführt (ich habe das mit dem Debugger überprüft), aber der ProgressDialog wird nicht beendet. Ich habe auch hide() und cancel() Methoden versucht, aber nichts funktioniert. Kann mir jemand helfen? Android-Version ist 2.2ProgressDialog verschwindet nicht nach dem Ausführen von ablehnen, verstecken oder abbrechen?
Hier ist der Code:
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
}
}
}
}
Sie zeigen uns nicht, wo Sie den OverlayDialog erstellen oder anzeigen. Sind Sie sicher, dass overlayDialog auf denselben Dialog verweist, der angezeigt wird? – Falmarri
Sie sind auch ein wenig vage über Threading. Wenn Sie eine Hintergrundaufgabe starten, verwenden Sie AsyncTask? Ist 'AsyncTask', wo' buildingLoaded' aufgerufen wird? Das würde nicht funktionieren. –
overlayDialog funktioniert gut - der progressDialog ist das Problem. – Martin