我有一个简单的用例:
Activity1创建一个fragment1
fragment1通知活动创建它并更新其activity1视图。
activity1。
我正在使用rxandroid,子库rxlifecycle
组件和android,但我还在学习阶段,stackoverflow上甚至没有rx-lifecycle
标签,所以我仍然在努力理解这个流程图书馆..
修改
我不喜欢使用EventBus,就像每个人都大喊大叫做某事一样,所以Rxjava Observable方法会非常有用
答案 0 :(得分:6)
要考虑两点:
仅仅因为你使用EventBus并不意味着它需要 全球。如果你愿意,你可以有多个活动巴士,你可以 在两个组件(活动和片段)之间共享一个。
RxJava文档中有几个示例 如何使用RxJava实现事件总线功能
通过使用事件总线,您可以通过取消整个流程与Android生命周期的关联来大大简化事情。
答案 1 :(得分:6)
为了将信息从片段发布到活动,您应该使用事件总线来通知有关片段创建的活动(替换回调和它们创建的混乱)。
使用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()
或您喜欢的任何地方。
此外,在活动中,您需要将以下代码用于监听事件总线:
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
}
}
});
对于第二部分,即从活动中更新片段,我不建议使用此方法,因为它会导致不必要的复杂性,而是使用“原始方式”:
updateView(Object obj)
onNext()
中,获取所需的片段SampleFragment fragment = (SampleFragment)getSupportFragmentManager().findFragmentByTag("TAG");
fragment.updateView(obj);
希望这有帮助。