Wie kann ich Daten zwischen einem Fragment und seiner Containeraktivität übergeben? Gibt es etwas Ähnliches wie das Übertragen von Daten zwischen Aktivitäten durch Absichten?
Ich habe das gelesen, aber es hat nicht viel geholfen:
http://developer.android.com/guide/topics/fundamentals/fragments.html#CommunicatingWithActivity
Antworten:
In Ihrem Fragment können Sie anrufen
getActivity()
.Dadurch erhalten Sie Zugriff auf die Aktivität, mit der das Fragment erstellt wurde. Von dort aus können Sie natürlich jede Art von Zugriffsmethode aufrufen, die sich in der Aktivität befindet.
zB für eine Methode, die
getResult()
für Ihre Aktivität aufgerufen wird :quelle
Versuchen Sie es mit Schnittstellen.
Jedes Fragment, das Daten an seine enthaltende Aktivität zurückgeben soll, sollte eine Schnittstelle deklarieren, die die Daten verarbeitet und weitergibt. Stellen Sie dann sicher, dass Ihre enthaltende Aktivität diese Schnittstellen implementiert. Beispielsweise:
JAVA
Deklarieren Sie in Ihrem Fragment die Schnittstelle ...
Verbinden Sie dann die Implementierung der Schnittstelle der enthaltenden Klasse mit dem Fragment in der onAttach-Methode wie folgt:
Wenn Sie in Ihrem Fragment die Datenübergabe verarbeiten müssen, rufen Sie sie einfach im dataPasser-Objekt auf:
Schließlich in Ihrer enthaltenen Aktivität, die
OnDataPass
...KOTLIN
Schritt 1. Schnittstelle erstellen
Schritt 2. Verbinden Sie dann die Implementierung der Schnittstelle der enthaltenden Klasse mit dem Fragment in der onAttach-Methode (YourFragment) wie folgt:
Schritt 3. Wenn Sie in Ihrem Fragment die Datenübergabe verarbeiten müssen, rufen Sie sie einfach im dataPasser-Objekt auf:
Schritt 4. Schließlich implementiert OnDataPass in Ihrer Aktivität
quelle
ActionBar.TabListener
und musste eine zusätzliche Schnittstelle hinzufügen.Einfachster Ansatz, aber nicht empfohlen
Sie können über das Fragment auf Aktivitätsdaten zugreifen:
Aktivität:
Fragment:
quelle
MyActivity
quelle
Übergeben von Daten zwischen einem Fragment und seiner Containeraktivität
Aktivität:
Fragment:
Lesen des Wertes im Fragment
quelle
Ich weiß nicht, ob dies der beste Weg ist oder nicht. Ich habe schon eine ganze Weile bei Google gesucht, um herauszufinden, wie ich ein Bundle von einem Fragment an seine Containeraktivität übergeben kann, aber ich habe stattdessen nur Daten von Aktivität zu Fragment gesendet (was für mich etwas verwirrend war, da ich ein Neuling bin).
später versuchte ich etwas Eigenes, das genau für mich funktionierte, wie ich wollte. Also werde ich es hier posten, falls jemand wie ich das Gleiche sucht.
// Daten aus Fragment übergeben.
// Abrufen von Daten aus dem Bundle aus der Containeraktivität.
quelle
Schnittstelle ist eine der besten Lösungen:
Kleberschnittstelle:
Meine Aktivität:
MyFragment:
quelle
Ich habe eine AppCompatActivity verwendet, die Datumslistener implementiert. Fragmente waren eine Notwendigkeit, da ich einen Datumsbereichsselektor codieren musste. Außerdem brauchte ich den Container, um die ausgewählten Daten zu erhalten und sie an die übergeordnete Aktivität zurückzugeben.
Für die Containeraktivität ist dies die Klassendeklaration:
Und die Schnittstellen für die Rückrufe:
Die Rückrufe sind Zeichenfolgen, da Datumsangaben Parameter in einer Abfrageauswahl sind.
Der Code für die Fragmente (basierend auf dem ursprünglichen Datumsfragment):
}}
Zum Erstellen des Containers + der Fragmente habe ich einen ViewPager (AppCompat) mit einer benutzerdefinierten Klasse verwendet, die FragmentPagerAdapter erweitert. Keine Dialoge.
quelle
Sie können EventBus einfach verwenden, es ist einfach und funktioniert hervorragend
EventBus in 3 Schritten
Ereignisse definieren:
public static class MessageEvent { /* Additional fields if needed */ }
Abonnenten vorbereiten: Deklarieren und kommentieren Sie Ihre Abonnementmethode, und geben Sie optional einen Thread-Modus an:
@Subscribe(threadMode = ThreadMode.MAIN)
public void onMessageEvent(MessageEvent event) {/* Do something */};
Registrieren Sie Ihren Abonnenten und heben Sie die Registrierung auf. Beispielsweise sollten sich Aktivitäten und Fragmente unter Android normalerweise entsprechend ihrem Lebenszyklus registrieren:
Ereignisse veröffentlichen:
EventBus.getDefault().post(new MessageEvent());
quelle
Ich weiß, dass dies zu spät sein könnte. Aber ich war auch immer in dieser Frage verloren. Ich teile diesen Link ... weil dies möglicherweise die beste Erklärung ist, die ich jemals im Internet dafür gefunden habe. Dies löst Fragment zu Aktivität und Fragment zu Fragment !
Sehr gut gelöst und erklärt
quelle
Das funktioniert bei mir ..
Fügen Sie in Aktivität diese Methode hinzu
und in Fragment diese Zeile hinzufügen
quelle
quelle
Eine andere einfache Möglichkeit, Daten, die von einer anderen Aktivität übergeben wurden, in einem Fragment in einer Containeraktivität abzurufen: Beispiel:
In Ihrer Aktivität_A erstellen Sie eine Absicht, als würden Sie Daten (Zeichenfolge hier) an eine andere Aktivität senden:
in Ihrem Fragment, enthalten in Ihrer Activity_B:
quelle
getBaseContext()
gibt mir den folgenden Fehler:The method getBaseContext() is undefined for the type new View.OnClickListener(){}