我正在尝试实现RxBus。我打算将其用于在片段/活动/对话框之间移动对象Animal
。在上面的代码中,我尝试将我的对象从“对话”窗口移动到属于AnswerFragment
的{{1}}。我知道没有RxBus就可以做到,但这是原则上的。
RxBus
QuestionActivity
我在对话框窗口上订阅了RxBus:
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;
}
}
并尝试在 iv.setOnClickListener(v -> {
RxBus.instanceOf().setAnimal(animal);
Intent intent = new Intent(context, QuestionActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
});
上抓住我的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
无法从RxBus夺走Animal,而当AnswerFragment
订阅该对象时,它就消失了。我说的对吗如果是这样,我该怎么办?
答案 0 :(得分:1)
使用BehaviorSubject或ReplaySubject,因为这些主题提供先前发出的值。 PublishSubject将仅向订阅者提供订阅点之后发出的值。