Mise à jour du fragment de l'activité à l'aide de Rxjava Android

J'ai un cas d'utilisation simple où:

J'utilise rxandroid, les composants rxlifecycle et l'android, mais je suis encore en phase d'apprentissage, il n'y avait même pas de tag rx-lifecycle sur stackoverflow, donc je suis toujours en difficulté pour comprendre le flux de cette bibliothèque.

modifier

Je préfère ne pas utiliser EventBus, c'est comme si tout le monde criait à chacun de faire quelque chose, donc l'approche Rxjava Observable sera très utile

  • ExpandableListView effondre tous les éléments parent
  • Utilisation des paramètres régionaux pour détecter si des unités impériales sont utilisées
  • RecyclerVoir ItemTouchHelper glisser supprimer l'animation
  • Sauvegarder et restaurer la base de données SQLite sur la carte SD
  • Récupérer le numéro de téléphone de l'appel entrant dans Android
  • Widget Android orientation portrait et paysage différente
  • 3 Solutions collect form web for “Mise à jour du fragment de l'activité à l'aide de Rxjava Android”

    Pour publier des informations de fragment à activité, vous devez utiliser un bus d'événements pour informer les activités sur la création de fragments (remplacement des rappels et du désordre qu'ils ont créé).

    Le code d'exemple pour le bus d'événements avec RxJava est:

     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); } } 

    Ensuite, à partir de votre fragment, vous pouvez appeler:

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

    À partir d' onAttach() ou onViewCreated() ou n'importe quel endroit que vous préférez.

    En outre, dans l'activité, vous devrez mettre le code suivant pour votre bus d'événement:

     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 } } }); 

    Pour la deuxième partie, c'est-à-dire pour mettre à jour le fragment de l'activité, je ne recommanderais pas l'utilisation de cette méthode car cela entraînera une complexité inutile. Utilisez plutôt la "manière originale" comme suit:

    1. Créez une méthode dans Fragment comme updateView(Object obj)
    2. Dans onNext() , obtenez le fragment souhaité comme SampleFragment fragment = (SampleFragment)getSupportFragmentManager().findFragmentByTag("TAG");
    3. Appeler fragment.updateView(obj);

    J'espère que cela t'aides.

    Deux points à considérer:

    1. Juste parce que vous utilisez un EventBus ne signifie pas qu'il doit être global. Vous pouvez avoir plusieurs bus d'événements si vous le souhaitez, et vous pouvez simplement partager un seul entre deux composants (Activité et Fragment).

    2. Il existe plusieurs exemples dans la documentation de RxJava qui montrent comment implémenter la fonctionnalité de bus d'événement à l'aide de RxJava

    En utilisant un bus d'événement, vous pouvez simplifier considérablement les choses en dissociant l'ensemble du processus à partir du cycle de vie d'Android.

    En utilisant RX dans les fragments, vous devez vous abonner et vous désabonner lorsque le fragment est joint et vous désabonner quand il se détache de l'activité hôte au lieu de onResume et onPause.

     @Override public void onAttach(Context context) { super.onAttach(context); //subscribe here } @Override public void onDetach() { super.onDetach(); //unsubscribe here } 
    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.