次のような簡単な使用例があります。
Activity1はfragment1を作成します
作成後のfragment1は、作成されたことをアクティビティに通知し、そのアクティビティ1ビューを更新します。
通知更新fragment1ビューを取得した後のactivity1。
私はrxandroid、サブライブラリrxlifecycle
コンポーネント、Androidを使用していますが、まだ学習段階にあり、stackoverflowにrx-lifecycle
タグすらなかったので、まだですこのライブラリの流れを理解するのに苦労しています。
編集
私はEventBusを使用したくない、それはみんなが何かをするためにみんなに叫んでいるようなものなので、RxjavaObservableアプローチは非常に便利です
フラグメントからアクティビティに情報を投稿するには、イベントバスを使用して、フラグメントの作成(コールバックとそれらが作成した混乱への置き換え)についてアクティビティに通知する必要があります。
RxJavaを使用したイベントバスのサンプルコードは次のとおりです。
_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);
}
}
_
次に、フラグメントから次のように呼び出すことができます。
_SampleEventsBus.getInstance().postFragmentAction(SampleEventsBus.ACTION_FRAGMENT_CREATED);
_
onAttach()
またはonViewCreated()
または任意の場所から。
また、アクティビティでは、イベントバスにlistetするために次のコードを配置する必要があります。
_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
}
}
});
_
2番目の部分、つまりアクティビティからフラグメントを更新する場合、不必要な複雑さをもたらすため、この方法を使用することはお勧めしません。代わりに、「元の方法」を次のように使用します。
updateView(Object obj)
としてメソッドを作成しますonNext()
で、目的のフラグメントをSampleFragment fragment = (SampleFragment)getSupportFragmentManager().findFragmentByTag("TAG");
として取得しますfragment.updateView(obj);
を呼び出すお役に立てれば。
考慮すべき2つのポイント:
EventBusを使用しているからといって、それがグローバルである必要があるという意味ではありません。必要に応じて複数のイベントバスを使用でき、2つのコンポーネント(アクティビティとフラグメント)間で1つのイベントバスを共有できます。
RxJavaドキュメントには、RxJavaを使用してイベントバス機能を実装する方法を示すいくつかの例があります。
イベントバスを使用すると、プロセス全体をAndroidライフサイクルから切り離すことで、作業を大幅に簡素化できます。