2016-09-14 5 views
0

Ich entwickle eine App mit Dialogen. Ich las, dass es zu nisten Dialoge nicht ratsam ist, so stelle ich eine Schnittstelle auf ausgewählte Werte zurückzukehren (mit NumberPickers) in einem Alertdialog zurück auf die Aktivität, die die DialogFragment in der ersten genannt Ort.Zurückkehren zu einer vorherigen Instanz von DialogFragment

Diese Aktivität dann ruft eine andere DialogFragment dessen Dialog gibt dem Benutzer die Möglichkeit zu bestätigen, was er im ersten Dialog gewählt haben. Wenn er bestätigt, dann wird eine Absicht nimmt ihn auf die nächste Aktivität, aber wenn nicht, ich will ihn zum vorherigen Instanz zurückkehren können des ersten Dialog und die notwendigen Änderungen vornehmen.

Ich habe versucht, den Befehl dialog.dismiss() aus dem Code zu löschen, die von der positiven Taste auf dem ersten Dialog, aber ohne Erfolg durchgeführt wird, wenn ich die zweiten Dialog weg die ersten Dialog gelassen.

Ich habe dann versucht zu "Pop" den Backstack mit FragmentManager, in der Hoffnung, dass die bisherige Instanz der Dialog wieder auftauchen würde. Ich habe mich geirrt.

builder.setNegativeButton(R.string.reset_duration, new DialogInterface.OnClickListener() { 
      @Override 
      public void onClick(DialogInterface dialog, int whichButton) { 
       //return to the previous instance of SDDialogFragment 
       int count = getFragmentManager().getBackStackEntryCount(); 
       if (count != 0) { 
        getFragmentManager().popBackStack(); 
       } 

Ich glaube, mein Fehler in zwei Punkten liegt:

a) Ich habe kein realistisches Verständnis davon, wie Dialoge kann aktiv bleiben.

b) Ich verwechsle Instanzen von Fragmente mit Instanzen von Dialoge.

Würde mir bitte jemand raten, wenn es überhaupt möglich ist, zu tun, was ich tun will, oder sollte ich glaube, nur in Bezug auf die Werte, die Übertragung unter Verwendung Bundle und vergessen zu einer früheren Instanz über die Rückkehr ? Thanks :)

Antwort

0

Der Dialog kann nicht aktiv bleiben, aber Sie können Ihren Dialog zurück in onDismiss() erhalten.

versuchen Sie dies: Ihre Aktivität machen onDismissListener implementieren bevor Ihr Dialog zeigt gesetzt ein entlassen Zuhörer yourDialog.setOnDismissListener(this);

Dann werden Sie Ihr Dialog zurück in onDismiss (DialogInterface Dialog)

+0

Wie bekomme ich das zeigen, Dialog wieder? (Es gibt keine Option zum Schreiben eines Dialogs.show() in onDismiss()) –

+0

Sie können alles, was der Benutzer in Ihrem Dialog ausgewählt hat, als Klassenmitglieder behalten und in onDismiss bekommen. Wenn Sie diesen Dialog dann erneut anzeigen müssen, übergeben Sie diese Daten an das neue Dialogfeld. Sie erstellen und repopulieren die Felder in onCreate des Dialogfelds. –

+0

Ich versuchte mit GetDialog() in OnDismiss(), um die Daten der Klassenmitglieder zu extrahieren, aber ich bekomme eine NullPointerException. Was meinst du? :) –

Verwandte Themen