gpt4 book ai didi

android - 使用 RxBus 将对象传输到 fragment

转载 作者:行者123 更新时间:2023-11-29 23:18:04 25 4
gpt4 key购买 nike

我正在尝试实现 RxBus。我打算用它在 fragment/Activity/对话之间移动对象 Animal。在上面的代码中,我尝试将我的对象从对话框窗口移动到属于 QuestionActivityAnswerFragment。我知道我可以在没有 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;
}
}

我在对话框窗口订阅 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);
});

并尝试在 AnswerFragment 上捕捉我的Animal:

 ...
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();

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

RxBus.instanceOf().setAnimal(animal);

...我的 AnswerFragment 还没有生效,所以 AnswerFragment 不能从 RxBus 中获取 Animal,当 AnswerFragment 订阅这个对象时,这个对象已经消失了.我是对的?如果是这样,我该怎么办?

最佳答案

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

关于android - 使用 RxBus 将对象传输到 fragment ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54960857/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com