Zul*_*utt 16 android android-fragments android-activity rx-android rx-binding
我有一个简单的用例,其中:
Activity1创建一个fragment1
创建后的fragment1通知活动它是否已创建并更新其activity1视图.
获取通知更新fragment1视图后的activity1.
我正在使用rxandroid,sublibrary rxlifecycle组件和android,但我还在学习阶段,rx-lifecyclestackoverflow上甚至没有标记,所以我仍然在努力理解这个库的流程..
编辑
我不喜欢使用EventBus,就像每个人都大喊大叫做某事一样,所以Rxjava Observable方法会很有用
需要考虑的两点:
仅仅因为你使用EventBus并不意味着它需要是全局的.如果需要,您可以拥有多个事件总线,并且您可以在两个组件(活动和片段)之间共享一个事件总线.
RxJava文档中有几个示例说明如何使用RxJava实现事件总线功能
通过使用事件总线,您可以通过将整个过程与Android生命周期取消关联来大大简化操作.
小智 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);
}
}
Run Code Online (Sandbox Code Playgroud)
然后从您的片段中调用:
SampleEventsBus.getInstance().postFragmentAction(SampleEventsBus.ACTION_FRAGMENT_CREATED);
Run Code Online (Sandbox Code Playgroud)
来自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
}
}
});
Run Code Online (Sandbox Code Playgroud)
对于第二部分,即从活动更新片段,我不建议使用此方法,因为它会导致不必要的复杂性,而是使用"原始方式":
updateView(Object obj)onNext(),获得所需的片段SampleFragment fragment = (SampleFragment)getSupportFragmentManager().findFragmentByTag("TAG");fragment.updateView(obj);希望这可以帮助.
| 归档时间: |
|
| 查看次数: |
4957 次 |
| 最近记录: |