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 wo buildingLoaded 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.
InformationsquelleAutor Martin | 2011-01-06
Schreibe einen Kommentar