2017-09-19 2 views
0

Ich habe Fragment mit EditTexts, die Benutzer ändern können.Auf der Suche nach dem besten Weg, modalen Dialog in OnPause zu implementieren

Neben habe ich wieder Symbolleiste auf der Schaltfläche (und physische auch Back-Button)

Wenn der Benutzer schlägt zurück, ich überprüfen, ob die Daten geändert wurden und wenn es - ich brauche Dialog zu öffnen und die Benutzer fragen "Möchten Sie Änderungen speichern?". Holen Sie den Klick und reagieren Sie entsprechend (positive oder negative Antwort).

Der beste Ort, um die Daten zu speichern (vielleicht falsch) ist in OnPause dieses Fragments.

Das Problem ist mit dem Dialog - es ist nicht modal und während es die Frage zeigt und auf Benutzerreaktion wartet - das Fragment darunter verschwindet und vorherige kommen zurück vom Stapel. Ich muss "onPause" mit dem Dialog anhalten, bis der Benutzer seine Wahl trifft. Was ist der einfache (oder korrekteste) Weg dies zu tun?

@Override 
public void onPause() { 
    if (!(text.getText().toString().equals(user.getName()))) 
    { 
     new MaterialDialog.Builder(getActivity()) 
       .title("Save changes?") 
       .content("You changed you personal details, save changes?") 
       .cancelable(false) 
       .positiveText("Save") 
       .negativeText("Discard") 
       .onPositive(new MaterialDialog.SingleButtonCallback() { 
        @Override 
        public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) { 
         save(); 
        }}) 
       .show(); 
    } 
    super.onPause(); 
} 

Wenn ich will es vor onPause zu tun - ich brauche die Toolbar-Zurück-Taste und physischen Zurück-Taste fangen - scheint zu viel Arbeit dafür. Auf der Suche nach einem eleganten Weg.

Danke

Antwort

0

onPause aufgerufen wird, wenn die Aktivität der Hintergrund bewegt sich in (nicht auf dem Bildschirm mehr angezeigt wird).

Um ein Dialogfeld anzuzeigen, bevor die App ausgeblendet wird, können Sie die Funktion "onBackPressed" in einer Aktivität überschreiben.

@Override 
public void onBackPressed() { 
    performBackPressed(); 
} 

public void performBackPressed(){ 
    //show your dialog here 
    //call finish(); when done to close app 
} 

können Sie rufen die performBackPressed() Methode, wenn die Zurück-Taste Toolbar zu gedrückt wird.

Wenn Sie versuchen, ein Popup aus einem Fragment anzuzeigen, wenn Zurück gedrückt wird, müssen Sie diese Methode in der Aktivität immer noch überschreiben und dann das Fragment notifizieren, wenn Sie zurück drücken.

In meiner App habe ich einen Container in der Aktivität, die alle meine Fragmente enthält. Ich benutze diesen Code, um das momentan aktive Fragment zu erhalten:

YourFragmentClass curFrag = (YourFragmentClass) fragmentManager.findFragmentById(R.id.fragment_container); 

dann habe ich ein Verfahren, in dem Fragmente onBackPressed() genannt und ich nenne nur, dass auf dem Fragmente ich gerade habe.

+0

Es ist ein Fragment. Es ist nicht auf BackPressed. – Shmuel

+0

Ich habe meine Antwort aktualisiert – swerly

Verwandte Themen