Ich habe eine Activity
mit mehreren Fragment
s. Ich möchte eine DialogFragment
zeigen oder eine andere Fragment
von einem der Fragment
s öffnen. Ich weiß, dass ein Activity
derjenige sein sollte, der damit beauftragt ist, Fragment
s zu öffnen, so habe ich stattdessen ein paar Dinge versucht.Aktivität und Fragment Interaktion
FIRST
Ich versuchte getActivity()
zu bedienen und warf es so kann ich eine Methode in der Activity
nennen eine Fragment
jedoch zu zeigen, dies schafft eine Abhängigkeit in der Fragment
mit dem Activity
und ich würde eine Abhängigkeit zu vermeiden, wie das Hinzufügen wenn möglich.
SECOND
Als nächstes habe ich versucht, einen Hörer die Activity
zu benachrichtigen, dass es eine Fragment
zeigen sollte. Also habe ich eine Klasse in Activity
erstellt, um die Listener-Schnittstelle zu implementieren. Aber ich hatte Probleme, weil ich New MyActivity().new Listener();
verwenden musste, und es würde einen Exception
werfen, als ich versuchte, getSupportFragmentManager()
zu verwenden, da diese Instanz der Activity
nicht initialisiert wird.
DRITTE
Ich habe versucht, dann müssen die Activity
den Zuhörer direkt implementieren, die funktioniert, weil dann bin ich nur eine Abhängigkeit mit dem Hörer und nicht die Aktivität. Aber jetzt komme ich zu dem Punkt, wo meine Activity
2 - 4 verschiedene Schnittstellen implementieren wird, was mich zögert, weil es den Zusammenhalt stark reduzieren wird.
So jede mögliche Weise, die ich versucht habe ich scheine in eine Mauer zu laufen und die Schaffung von Abhängigkeiten Ich bin nicht sicher, ich Schaffung werden müssen. Bin ich geschraubt und muss mit einer dieser Optionen gehen? Wenn ja, welche Option wäre am besten? Jede Hilfe oder Vorschläge werden sehr geschätzt.
Es gibt viele Möglichkeiten, es zu tun, ich bevorzuge Dinge so entkoppelt wie möglich, und dafür mag ich einen Event-Bus. Siehe zum Beispiel otto: http://square.github.io/otto/. (Lässt Sie alle Schnittstellen/Listener loswerden. Übergeben Sie Daten, tun Sie es mit starken Typen, tun Sie es in einer übersichtlichen Weise.) –
Es scheint vielversprechend. Ich muss es überprüfen. Danke für den Tipp. –