android - 如何使用 rxJava 收集表单输入、评估和有条件地转到另一个视图或发布数据
问题描述
我有一个带有 rx-binding observables 的两个输入设置的表单,并且我有验证工作以启用/禁用我的提交。
我正在努力思考的是表单提交。单击提交时。我需要从表单输入中获取最新值。然后评估我是否需要更多信息,这会导致调用视图以转到不同的页面。如果不需要更多信息,那么我需要进行改造。
我不确定获取最新表单值的正确方法(combineLatest、withLatestFrom、zip?)以及如何有条件地回调视图与改造后的帖子,特别是应该由操作员直接处理的内容,与来自的组合回调combineLatest,与订阅回调。
感谢您的任何帮助。
解决方案
这是我想出的。它似乎工作。如果您发现任何问题,或者我可以做得更好的事情,请回复。
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();
})
);
}
}));
}
推荐阅读
- html - 活动输入表单 - 出现标签 - 纯 css 解决方案
- ios - 设置 UITextField 的文本不会更新 UI,直到它获得焦点 | iOS
- nginx - Nginx 不监听 80 端口
- javascript - 如何使用反应挂钩订阅更改 redux?
- kubernetes-helm - 如何在 okd 环境中安装的 jenkinsx 中将 helm 从 2 升级到 3 版本
- reactjs - 如何在创建反应应用程序中使用 scss 变量?
- dart - 在飞镖中,使用第一个字符串的长度将字符串分成两部分
- c - 为什么我们在初始化链表的根时使用 node* 而不是只说 node ?
- r - 是否有可以在 R 中找到特定站点的服务器时间的编码?
- unity3d - 2D 盒子碰撞器在 Unity 中不起作用