2016-07-18 11 views
0

Ich versuche, eine Aktion in einem Fragment durchzuführen, dann zum vorherigen Fragment und zeigen Sie eine Snackbar mit einer Nachricht, die Bestätigung der Aktion aus dem ersten Fragment. Ich erschaffe und zeige jedoch die Snackbar im ersten Fragment (dasjenige, von dem ich gehe), und die Snackbar erscheint nicht in dem Fragment, zu dem ich wechseln werde, wahrscheinlich weil es in dem Fragment gezeigt wird, das ich bewege von.Zeige snackbar nach dem Popping Fragment Backstack

ich die Ausführung der Code innerhalb eines Alertdialog:

builder.setPositiveButton(positiveText, new DialogInterface.OnClickListener() { 
       @Override 
       public void onClick(DialogInterface dialog, int which) { 
        dbHandler.deleteExercise(exercise.getId()); 

        // Making the snackbar here did not work, either. 

        getFragmentManager().popBackStack(); 

        Snackbar snack = Snackbar.make(mainLayout, "Exercise deleted", Snackbar.LENGTH_SHORT); 
        snack.show(); 
       } 
      }); 

Irgendeine Idee, wie ich über die Erreichung dieses gehen könnte?

Dank!

EDIT:

Ich habe diese unglaublich grobe Zeichnung des Strömungs es klarer zu machen, was zu erreichen Ich versuche.

+0

Wollen Sie 'Snack Bar' in früheren * Fragment zeigen *, wenn Sie wechseln? –

+0

@jaydroider Ja, der Ablauf ist in etwa so: Wählen Sie einen Gegenstand aus der Liste der Gegenstände (die Liste ist das "vorhergehende Fragment") -> Holen Sie sich eine detaillierte Ansicht des ausgewählten Gegenstandes ("aktuelles Fragment"). Klicken Sie, um das Element zu löschen -> Gehen Sie zurück zur Liste der Elemente ("vorheriges Fragment") und zeigen Sie eine Snackbar an. Hat das Sinn gemacht? – Plasma

+0

Grundsätzlich versuchen Sie, Daten zwischen Fragmenten zu übergeben, die das Löschen anzeigen. Sie können diese Antworten verwenden, um dies http://stackoverflow.com/questions/5194548/how-to-pass-data-between-fragments zu tun. Die allgemeine Idee ist, dass Sie Aktivität als Schnittstelle zwischen den beiden Fragmenten verwenden. Es gibt andere Methoden wie die Verwendung von Roboguice- und Otto-Bibliotheken. all diese sind in den Antworten beschrieben –

Antwort

0

ich am Ende der Umsetzung Messaging zwischen Fragments über den Haupt Activity und Überprüfung für Nachrichten in dem onResume() Methode des Fragments:

MainActivity:

private String fragmentTransactionMessage; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 

     // Snip 

     // Initialize fragment transaction message 
     fragmentTransactionMessage = null; 

     // Snip 
    } 

    // Three methods used to send information (text) between fragments 
    public void setFragmentTransactionMessage(String message) { 
     this.fragmentTransactionMessage = message; 
    } 

    public String getFragmentTransactionMessage() { 
     return fragmentTransactionMessage; 
    } 

    public void resetFragmentTransactionMessage() { 
     this.fragmentTransactionMessage = null; 
    } 

Fragment 2:

// Remove exercise from database 
dbHandler.deleteExercise(exercise.getId()); 

// Update message in main activity 
((MainActivity)getActivity()).setFragmentTransactionMessage("Item deleted"); 

// Move to previous fragment 
getFragmentManager().popBackStack(); 

Fragment 1:

@Override 
public void onResume() { 
    super.onResume(); 

    // Check for messages in main activity 
    String message = ((MainActivity)getActivity()).getFragmentTransactionMessage(); 

    // If any, display as snackbar 
    if(message != null) { 
     Snackbar snack = Snackbar.make(mainLayout, message, Snackbar.LENGTH_SHORT); 
     snack.show(); 

     // Reset message in activity 
     ((MainActivity)getActivity()).resetFragmentTransactionMessage(); 
    } 
} 
Verwandte Themen