ProgressDialog nicht verschwindet nach der Ausführung zu verwerfen, ausblenden oder Abbrechen?
Habe ich eine Overlay-Erweiterung, die hat 2 Dialoge als private Attribute - ein Dialog und ein ProgressDialog. Nach einem Klick auf das Overlay in die MapView, die Dialog-Objekt wird angezeigt. Wenn der Benutzer auf eine Schaltfläche klickt, der Dialog verschwindet und der ProgressDialog wird angezeigt. Gleichzeitig wird ein hintergrund-task wird gestartet, indem eine Benachrichtigung mit Service. Wenn die Aufgabe abgeschlossen ist, wird eine Methode (buildingLoaded) in die Overlay-Objekt aufgerufen wird, wechseln Sie die Ansicht und schließen Sie die ProgressDialog. Die Ansicht wird gewechselt, der code ausgeführt wird (ich habe mit dem debugger), aber der ProgressDialog wird nicht entlassen. Ich habe auch versucht, hide() und cancel () - Methoden, aber nichts funktioniert. Kann mir jemand helfen?
Android version ist 2.2
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 nicht uns zeigen, wo Sie erstellen oder zeigen die overlayDialog. Sind Sie sicher, dass overlayDialog auf den gleichen dialog, der zeigt?
- Du bist auch ein wenig vage über threading. Beim starten einer hintergrund-task, sind Sie mit AsyncTask? Ist die
AsyncTask
wobuildingLoaded
aufgerufen wird? Das würde nicht funktionieren. - overlayDialog ist in Ordnung - der progressDialog ist das problem.
- OK, hier ist die grundlegende Struktur des Projekts: Die Haupttätigkeit (MapActivity) startet einen Service laufen als hintergrund-task. Wenn der Benutzer interagiert mit der Karte, einige Nachrichten an das Service über Absichten und einige XML-Daten geladen und verarbeitet. Nachdem die Daten verarbeitet werden, in der Absicht gesendet wird, um die main-Aktivität, die findet das Overlay und ruft die buildingLoaded () - Methode der überlagerung. Ich bin mir fast sicher, dass das richtige Objekt verwiesen wird, da habe ich nur ein Recht jetzt.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nicht sicher, ob dies die Ursache des Problems, sondern die Methode, die Sie aufrufen, sich an
ProgressDialog
iststatic
, aber Sie rufen es auf eine Instanz der Klasse. Hier ist die Methode-definition:Wie Sie sehen können, ist die Methode gibt eine
ProgressDialog
Sie nicht durchführen dieshow
Betrieb auf die Instanz der Klasse. Aktualisieren Sie den code so ein:oder
ProgressDialog.show (...) - Methoden, die in der Tat eine show aufführen() auf den dialog, bevor er es wieder. Hier ist Android.jar Quelle:
Alle überladungen dieser Methode beziehen sich auf diese.