Ich habe eine Activity
und sechs verschiedene Fragments
daran angeschlossen. Jedes Fragment hat OnFragmentInteractionListener
Schnittstelle und Aktivität implementiert alle diese Listener, um Rückrufe zu erhalten. Es sieht ein wenig unordentlich aus, also bin ich interessiert, gibt es einige Muster/Wege, dies zu vereinfachen und eleganter zu machen?Wie behandelt man die Interaktionen mit mehreren Fragmenten in einer Aktivität richtig?
Antwort
Eine gute Lösung wäre, den SAME OnFragmentInteractionListener für alle Fragmente zu verwenden und einen Param jeder Listener-Methode (wie einen TAG-Parameter) zu verwenden, um zu ermitteln, welches Fragment die Aktion gesendet hat.
Hier ein Beispiel:
Erstellen Sie eine neue Klasse und jedes Fragment verwenden diese Klasse
OnFragmentInteractionListener.java
public interface OnFragmentInteractionListener {
public void onFragmentMessage(String TAG, Object data);
}
In Ihrer Tätigkeit:
public void onFragmentMessage(String TAG, Object data){
if (TAG.equals("TAGFragment1")){
//Do something with 'data' that comes from fragment1
}
else if (TAG.equals("TAGFragment2")){
//Do something with 'data' that comes from fragment2
}
...
}
Sie verwenden können Objekttyp, um jede Art von Daten zu übergeben, die Sie möchten (in jedem Fall) y if, müssen Sie Object in den Typ konvertieren, der notwendig war).
Auf diese Weise ist die Wartung einfacher als 6 verschiedene Listener und eine Methode für jede Art von Daten, die Sie übergeben möchten.
Hoffe, das hilft.
Mein Versuch neonamu's answer Verbesserung:
Sie eine Schnittstelle wie oben angegeben definieren kann, aber ein generisches
public interface OnListFragmentInteractionListener<T> {
void onListFragmentInteraction(String tag, T data);
}
Dann in der Aktivität Host Sie es speziell für den Typ implementieren können Sie wollen, oder wie oben für Object empfohlen:
Auf diese Weise, wenn Sie die Schnittstelle je nach den Anforderungen Ihrer Anwendung vielleicht implementieren Sie können diese Schnittstelle in einer anderen Situation wiederverwenden.
Funktioniert wie ein Charme. Danke vielmals! –
Ich habe mich gefragt, warum Sie @Override verwenden und Benutzer Neonamu nicht. Arbeiten beide? – Burkely91
@ Burkely91 ja es wird ohne es funktionieren.BUT Sie sollten es verwenden. Die Override-Annotation in Java soll eine Überprüfung/Verifizierung sein, dass Sie tatsächlich die Überschreibung durchführen, die Sie für richtig halten (es wird einen Fehler melden, wenn Sie beispielsweise einen Parameter vergessen), ohne Override würden Sie einfach eine neue Methode definieren mit dem gleichen Namen verschiedene Parameter (eine Überladung) und nicht die Schnittstelle implementieren – HenriqueMS