Gesamt Anfänger hier.Fragment to Fragment Kommunikation - Warum ist die Schnittstelle wirklich notwendig?
Wie ich verstehe, sollten Fragmente durch ihre Hosting-Aktivitäten miteinander kommunizieren, um in anderen Situationen unabhängig und wiederverwendbar zu bleiben.
Ich habe gelesen, dass sollte getan werden, indem Interfaces im Fragment deklarieren und sie in der Aktivität implementieren. Ist das der beste Weg, "nur" zu gehen, weil Sie sicherstellen können, dass die Aktivität für diese Kommunikation bereit ist (es hat wirklich diese Methode, um mit der Kommunikation umzugehen)?
Da ich mich nur schwer mit Schnittstellen (und vielen anderen Dingen in Java/Android) herumschlagen kann, könnte dies ohne die Schnittstelle geschehen? Kann ich einen Verweis auf die Hosting-Aktivität im Fragment erhalten und einfach die Methode der Aktivität aufrufen?
(Fragment Klasse)
Activity activity = getActivity();
activity.doThatThingToOtherFrag(String myString);
(Aktivitätsklasse)
Fragment otherFragment = getSupportFragmentManager().findFragmentById(R.id.myOtherFrag);
public void doThatThingToOtherFrag(String string) {
//do something to myOtherFrag
}
Oder ist es etwas anderes, über eine Schnittstelle in diesem Fall der Umsetzung, die ich nicht bekommen?
* EDIT *
Sagen wir, ich, dass Fragment in einer anderen Aktivität wiederverwenden. Solange diese Tätigkeit auch eine doThatThingToOtherFrag (String myString) Methode hat, kann ich einen Verweis auf sie durch getActivity() bekommen und noch activity.doThatThingToOtherFrag (String myString) von meinem Fragment nennen, nicht wahr? Ich müsste an meinem Fragmentcode nichts ändern - oder verpasse ich hier etwas?
Ich denke, meine Frage sollte sein: ist die Schnittstelle dort nur, um sicherzustellen, dass die/jede Hosting-Aktivität implementiert doThatThingToOtherFrag Methode? Oder gibt es noch etwas, das ich in dieser Situation nicht über Schnittstellen weiß? Danke für die Hilfe!
Nun, Sie vermissen die Tatsache, dass es nicht 'Activity' sein wird, sondern' MyActivity' und Ihre Methode mehr wie '((MyActivity) activity) .doThatThing' ... mit anderen Worten, da' doThatThing' zu '' gehört MyActivity' wirst du wirken müssen, was eng mit MyActivity gekoppelt ist. – trooper
... um sie erneut zu verwenden, müssen Sie diese Umwandlung jedes Mal ändern, es sei denn, Sie programmieren eine Schnittstelle. Wenn Sie immer mit Activity arbeiten (und nicht mit einer Subklasse), dann hat die Schnittstelle keinen Sinn, aber sie geht davon aus, dass 'doThatThing' eine von Ihnen geschriebene Methode ist und nicht etwas, das bereits zu Ihrer' Activity'-Basisklasse gehört. – trooper
Ich dachte, ich könnte jede Unterklasse von Activity (zB 'FragmentActivity') einfach in' (Activity) 'umwandeln und solange die doThatThing-Methode da wäre, müsste ich nichts in meinem Fragmentcode ändern. –