我正在努力实现RxBus。我打算用它在片段/活动/对话框之间移动对象Animal
。在上面的代码我尝试将我的对象从Dialog窗口移动到AnswerFragment
,QuestionActivity
属于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这个对象已经消失。我是对的?如果是这样,我该怎么办?
使用BehaviorSubject或ReplaySubject,因为这些主题提供先前发出的值。 PublishSubject仅向订阅者提供订阅点之后发出的值。