2016-04-06 9 views
0

Ich habe zwei Hauptaktivitäten und der Rest der Seiten sind Vollbild DialogFragments (anstelle von einem anderen Activity), irgendwann öffne ich eine DialogFragment von einem anderen DialogFragment. Wie kann die erste DialogFragment wissen, ob die Back-Taste gedrückt wird oder wenn die DialogFragment darüber hinaus entlassen wird?Wie kann ich wissen, wann ein DialogFragment nach dem Drücken der Taste erneut angezeigt wird?

Ich habe die DialogFragment s nicht zu dem Backstack hinzugefügt, weil ich nicht möchte, dass sie einige Ansichten in der Aktivität ersetzen.

Ich habe versucht, die onResume() und onHidden() zu überschreiben. Ich habe versucht, ein Ereignis zum FragmentManager hinzuzufügen, und keines brachte irgendwelche relevanten Ergebnisse.

Ich würde mich freuen, wenn jemand etwas Licht darauf werfen könnte, wie ich das tun könnte?

Mein Ziel ist es, die DialogFragment oder Activity zu aktualisieren, wenn es nach dem obigen Dialog angezeigt wird (neue Daten vom Server oder Änderungen, die ich im Dialogfeld vorgenommen habe, die die vorherige Seite betreffen).

+0

Steuern Sie nicht, wo der Dialog Anruf anzeigen ist? – Nanoc

+0

Nein, es ist nur hinter dem, der gezeigt wurde. – asaf

+0

Aber Sie steuern es, können Sie eine Schnittstelle Callback verwenden, um den Dialog zu benachrichtigen? – Nanoc

Antwort

0

Sie haben ein paar Optionen. Der einfachste Weg wäre, nur eine Schnittstelle zu verwenden.

public class TopFragment { 
    private OnDismissListener mListener; 

    public void setOnDismissedListener(OnDismissListener listener) { 
     mListener = listener; 
    } 

    private void dismiss() { 
     mListener.onDismissed(); 
    } 

    public interface OnDismissListener { 
     void onDismissed(); 
    } 
} 

public class BottomFragment implements TopFragment.OnDismissListener { 
    @Override 
    public void onDismissed() { 
     //reload views 
    } 

    private void createTopFragment() { 
     TopFragment fragment = new TopFragment(); 
     fragment.setOnDismissedListener(this); 
    } 
} 

Wenn Sie jedoch nur Sorgen um Ihre Daten synchron zwischen den Bildschirmen sind Sie auch so etwas wie eine Datenbank ContentObserver, ein BroadcastReceiver oder ein Ereignis Bus von einer Art zu hören für Änderungen in Daten nutzen könnten und Aktualisieren Sie Ihre Ansichten entsprechend. Einer davon ist wahrscheinlich ein viel besseres Muster, weil er Ihre zwei Fragmente entkoppelt, während Sie, wenn Sie einen Listener verwenden, die beiden stark gekoppelt sind.

+0

DANKE, es ist eine gute Idee! – asaf