使用RxBus将对象传输到片段

时间:2019-03-02 16:59:57

标签: android rx-java2

我正在尝试实现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订阅该对象时,它就消失了。我说的对吗如果是这样,我该怎么办?

1 个答案:

答案 0 :(得分:1)

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