Ich versuche, eine Methode in meiner Aktivität aus einem Fragment aufzurufen. Ich möchte, dass das Fragment die Methodendaten angibt und die Daten abruft, wenn die Methode zurückkehrt. Ich möchte ähnlich wie beim Aufrufen einer statischen Methode erreichen, jedoch ohne die Verwendung von statischen, da dies zu Problemen bei der Aktivität führt.
Neu in Fragmenten, daher brauche ich eine einfache und pädagogische Erklärung!
Vielen Dank!
android
android-fragments
Joakim Ericsson
quelle
quelle
Sie sollten wahrscheinlich versuchen, das Fragment von der Aktivität zu entkoppeln, falls Sie es woanders verwenden möchten. Sie können dies tun, indem Sie eine Schnittstelle erstellen, die Ihre Aktivität implementiert.
Sie würden also eine Schnittstelle wie die folgende definieren:
Angenommen, Sie möchten der Aktivität einen String geben und eine Ganzzahl zurückgeben:
Dies kann im Fragment oder in einer separaten Datei definiert werden.
Dann würden Sie Ihre Aktivität die Schnittstelle implementieren lassen.
Dann hätten Sie in Ihrem Fragment eine MyStringListener-Variable und würden den Listener in der Methode fragment onAttach (Activity activity) festlegen.
bearbeiten (17.12.2015):
onAttach(Activity activity) is deprecated, use onAttach(Context context) instead, it works as intended
Die erste Antwort funktioniert definitiv, aber sie koppelt Ihr aktuelles Fragment mit der Hostaktivität. Es empfiehlt sich, das Fragment von der Hostaktivität zu entkoppeln, falls Sie es für eine andere Aktivität verwenden möchten.
quelle
Für Kotlin- Entwickler
Für Java- Entwickler
quelle
Update, nachdem ich mehr verstanden habe, wie Fragmente funktionieren. Jedes Fragment gehört zu einer übergeordneten Aktivität. Also benutze einfach:
Aus dem Fragment heraus. Es ist eine bessere Antwort, weil Sie überflüssige Würfe vermeiden. Wenn Sie die Abgüsse mit dieser Lösung nicht vermeiden können, verwenden Sie die folgende.
============
Was Sie tun müssen, ist, auf die äußere Aktivität zu werfen
Das Erstellen einer neuen Instanz verwirrt den Android-Frame und kann ihn nicht erkennen. siehe auch :
https://stackoverflow.com/a/12014834/1984636
https://stackoverflow.com/a/2042829/1984636
quelle
Obwohl ich Marcos Antwort völlig mag, denke ich, dass es fair ist, darauf hinzuweisen, dass Sie auch ein Publish / Subscribe-basiertes Framework verwenden können, um das gleiche Ergebnis zu erzielen. Wenn Sie beispielsweise mit dem Event-Bus fahren, können Sie Folgendes tun
Fragment :
Aktivität:
quelle
In Kotlin können Sie die Aktivitätsmethode wie folgt aus einem Fragment aufrufen:
quelle
Für den Zugriff auf eine in Ihrer Aktivität deklarierte Funktion über Ihr Fragment verwenden Sie bitte eine Schnittstelle, wie in der Antwort von marco gezeigt.
Für den Zugriff auf eine in Ihrem Fragment deklarierte Funktion über Ihre Aktivität können Sie diese verwenden, wenn Sie kein Tag oder keine ID haben
Dies ist die ViewpagerAdapterClass
Diese Antwort ist für Noobs wie mich. Haben Sie einen guten Tag.
quelle
Dies ist aus der Fragment-Klasse ...
Dieser Code aus der Aktivitätsklasse ...
quelle
Ich habe es mit allen in diesem Thread gezeigten Methoden versucht und keine hat für mich funktioniert. Probieren Sie diese aus. Es hat bei mir funktioniert.
quelle
Ich habe nach dem besten Weg gesucht, dies zu tun, da sich nicht jede Methode, die wir aufrufen möchten, in Fragment mit demselben übergeordneten Aktivitätselement befindet.
In deinem Fragment
In Ihrer Aktivität
quelle
((YourActivityName)getActivity()).functionName();
Beispiel:
((SessionActivity)getActivity()).changeFragment();
Hinweis: Der Klassenname sollte öffentlich sein
quelle
Wo
your_activity
ist der Name Ihrer Aktivität undmethod_name()
der Name der Methode, die Sie aufrufen möchten.quelle
Für Kotlin probieren Sie es aus
quelle