Aktualisieren von Fragment aus der Aktivität mit Rxjava Android

Ich habe einen einfachen Anwendungsfall wo:

  • Activity1 Erstellen Sie ein Fragment1

  • Fragment1 nach der Erstellung Benachrichtigung auf Aktivität, die es erstellt und aktualisiert seine Aktivität1 Ansichten.

  • Activity1 nach dem Benachrichtigungsaktualisierung fragment1 views.

Ich bin mit Rxandroid, Sublibrary rxlifecycle Komponenten und Android, aber ich bin immer noch in der Lernphase, gab es nicht einmal rx-lifecycle lifecycle Tag auf stackoverflow, so bin ich immer noch kämpfen, um den Fluss dieser Bibliothek zu verstehen ..

Bearbeiten

Ich ziehe es vor, EventBus nicht zu benutzen, es ist genau wie jeder, der jedem schreit, um etwas zu tun, also Rxjava Observable Ansatz wird viel nützlich sein

3 Solutions collect form web for “Aktualisieren von Fragment aus der Aktivität mit Rxjava Android”

Für die Buchung von Informationen aus Fragment zu Aktivität, sollten Sie einen Event-Bus für die Information der Aktivität über Fragment-Erstellung (Ersatz für die Callbacks und die Chaos, die sie erstellt).

Beispielcode für Eventbus mit RxJava ist:

 public class SampleEventsBus { private static final String TAG = SampleEventsBus.class.getSimpleName(); private static final String TAG2 = SampleEventsBus.class.getCanonicalName(); public static final int ACTION_FRAGMENT_CREATED = 1; public static final int ACTION_FRAGMENT_OTHER = 2; private static SampleEventsBus mInstance; public static SampleEventsBus getInstance() { if (mInstance == null) { mInstance = new SampleEventsBus(); } return mInstance; } private SampleEventBus() {} private PublishSubject<Integer> fragmentEventSubject = PublishSubject.create(); public Observable<Integer> getFragmentEventObservable() { return fragmentEventSubject; } public void postFragmentAction(Integer actionId) { fragmentEventSubject.onNext(actionId); } } 

Dann können Sie aus Ihrem Fragment:

 SampleEventsBus.getInstance().postFragmentAction(SampleEventsBus.ACTION_FRAGMENT_CREATED); 

Von onAttach() oder onViewCreated() oder an jedem beliebigen Ort, den Sie bevorzugen.

Auch in der Aktivität müssen Sie den folgenden Code auf Ihren Event-Bus gelistet:

 SampleEventsBus .getInstance().getFragmentEventObservable().subscribe(new Subscriber<Integer>() { @Override public void onCompleted() { } @Override public void onError(Throwable e) { } @Override public void onNext(Integer actionId) { if(actionId == SampleEventsBus.ACTION_FRAGMENT_CREATED) { //do any required action } } }); 

Für den zweiten Teil, dh um das Fragment von der Aktivität zu aktualisieren, werde ich nicht empfehlen, diese Methode zu verwenden, da es zu unnötiger Komplexität führt, stattdessen den "ursprünglichen Weg" als:

  1. Erstellen Sie eine Methode in Fragment als updateView(Object obj)
  2. In onNext() erhalten Sie das gewünschte Fragment als SampleFragment fragment = (SampleFragment)getSupportFragmentManager().findFragmentByTag("TAG");
  3. Call fragment.updateView(obj);

Hoffe das hilft.

Zwei Punkte zu beachten:

  1. Nur weil du ein EventBus benutzt, bedeutet das nicht, dass es global sein muss. Sie können mehrere Event-Busse haben, wenn Sie wollen, und Sie können nur eine einzelne zwischen zwei Komponenten (Aktivität und Fragment) teilen.

  2. Es gibt einige Beispiele in der RxJava-Dokumentation, die zeigen, wie die Ereignisbus-Funktionalität mit RxJava implementiert wird

Durch die Verwendung eines Event-Busses können Sie die Dinge sehr gut vereinfachen, indem Sie den gesamten Prozess aus dem Android-Lebenszyklus auflösen.

Mit RX in Fragmenten müssen Sie abonnieren und abmelden, wenn Fragment anhängen und abbestellen, wenn es von der Host-Aktivität anstelle von onResume und onPause losgelöst wird.

 @Override public void onAttach(Context context) { super.onAttach(context); //subscribe here } @Override public void onDetach() { super.onDetach(); //unsubscribe here } 
Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.