使用RxBus将对象传输到片段

问题描述 投票:1回答:1

我正在努力实现RxBus。我打算用它在片段/活动/对话框之间移动对象Animal。在上面的代码我尝试将我的对象从Dialog窗口移动到AnswerFragmentQuestionActivity属于public class RxBus { private static RxBus instance; private PublishSubject<Animal> animal = PublishSubject.create(); public static RxBus instanceOf() { if (instance == null) { instance = new RxBus(); } return instance; } public void setAnimal(Animal sendedAnimal) { animal.onNext(sendedAnimal); } public Observable<Animal> getAnimal() { return animal; } } 。我知道我可以在没有RxBus的情况下做到这一点,但它原则上是。

RxBus

 iv.setOnClickListener(v -> {
            RxBus.instanceOf().setAnimal(animal);
            Intent intent = new Intent(context, QuestionActivity.class);
            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            context.startActivity(intent);
            });

我在对话框窗口上订阅了RxBus:

Animal

并尝试在AnswerFragment上抓住我的 ... private Animal currentAnimal; ... @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v = inflater.inflate(R.layout.fragment_question_answer, container, false); Disposable disposable = RxBus.instanceOf().getAnimal().subscribe(animal -> currentAnimal = animal); disposable.dispose();

RxBus.instanceOf().setAnimal(animal);

但我的动物是空的,我不知道为什么。直觉上我认为它与生命周期有关。我想当我写...

AnswerFragment

...我的AnswerFragment尚未生效,所以AnswerFragment不能从RxBus采取动物,当qazxswpoi subscibe这个对象已经消失。我是对的?如果是这样,我该怎么办?

android rx-java2
1个回答
1
投票

使用BehaviorSubject或ReplaySubject,因为这些主题提供先前发出的值。 PublishSubject仅向订阅者提供订阅点之后发出的值。

© www.soinside.com 2019 - 2024. All rights reserved.