首页 > 解决方案 > 如何使用 rxJava 收集表单输入、评估和有条件地转到另一个视图或发布数据

问题描述

我有一个带有 rx-binding observables 的两个输入设置的表单,并且我有验证工作以启用/禁用我的提交。

我正在努力思考的是表单提交。单击提交时。我需要从表单输入中获取最新值。然后评估我是否需要更多信息,这会导致调用视图以转到不同的页面。如果不需要更多信息,那么我需要进行改造。

我不确定获取最新表单值的正确方法(combineLatest、withLatestFrom、zip?)以及如何有条件地回调视图与改造后的帖子,特别是应该由操作员直接处理的内容,与来自的组合回调combineLatest,与订阅回调。

感谢您的任何帮助。

标签: androidrx-java2rx-binding

解决方案


这是我想出的。它似乎工作。如果您发现任何问题,或者我可以做得更好的事情,请回复。

private void handleMenuItemClicks() {
    mCompositeDisposable.add(view.menuItemClicks().subscribe(menuItem -> {
        if (menuItem.getItemId() == R.id.action_submit) {
            mCompositeDisposable.add(Observable.combineLatest(
                    view.nameTextChanges(),
                    view.msgTextChanges(),
                    (CharSequence nameTxt, CharSequence msgTxt) -> {
                        return new CharSequence[] {nameTxt, msgTxt};
                    }
                ).filter(values -> {
                    boolean isParticipant = participant != null && values[0].toString().equals(participant.toString());
                    if (!isParticipant) {
                        view.navigateToInfo();
                    }
                    return isParticipant;
                }).flatMap(values -> myService.createItem(
                    participant.participantNumber, values[0].toString(), values[1].toString())
                    .subscribeOn(Schedulers.io())
                    .observeOn(AndroidSchedulers.mainThread()).toObservable()
                ).subscribe(response -> {
                    view.showSuccess();
                })
            );
        }
    }));
}

推荐阅读