数据绑定ViewModel与RxJava 2

时间:2019-10-25 12:09:00

标签: android rx-java2 android-databinding android-livedata

所以到目前为止,基本上我一直在应用程序中广泛使用rxjava2,但是决定检查数据绑定,查看模型和实时数据。而且我不确定我是否拥有所有这一切,因为除了在设备旋转期间保存状态外,我看不到切换还有其他明显的好处,我什至可以说我看到在视图之间引入带有视图模型的数据绑定的弊端和rx Java提供的请求。

让我们看一些注册表格的例子。它将包含:

  • 2个输入-名称和姓氏

  • 具有3个选择的字段

  • 具有进度的按钮

在反应世界中,我将有两个具有名称和姓氏的可观察对象,一个可合并3个选择单击并将其映射到正确枚举的可观察对象,然后我可以将所有数据组合在一起,直接与我的{{1} }负责在两次之间发送数据,而我的状态将是进度或错误,而tada Im已完成。

这是我使用数据绑定和视图模型想到的:

single

因此,我将使用bindData直接从xml中更改class LiveDataViewModel : ViewModel() { enum class Choice { NONE, FIRST, SECOND, THIRD } private val _progressVisibilityLiveData = MutableLiveData<Boolean>() private val _errorLiveData = MutableLiveData<GlobalError>() val progressVisibilityLiveData: LiveData<Boolean> = _progressVisibilityLiveData.apply { value = false } val errorLiveData: LiveData<GlobalError> = _errorLiveData val data = LiveDataData() val observableData = ObservableField(LiveDataData()) fun actionContinue() { _progressVisibilityLiveData.postValue(true) if (observableData.get()?.isValid() == false) _errorLiveData.postValue(GlobalError.AllFieldsRequired) else sendToApi() } private fun sendToApi() { // TODO there would be still an rx java call to single, when we would handle error in the same way we are doing // it in actionContinue } data class LiveDataData(val firstName: ObservableField<String> = ObservableField(""), val secondName: ObservableField<String> = ObservableField(""), val choice: ObservableField<Choice> = ObservableField(Choice.NONE)) { fun changeChoice(newChoice: Choice) { choice.set(newChoice) } fun isValid(): Boolean = !firstName.get().isNullOrEmpty() && !secondName.get().isNullOrEmpty() && choice.get() != Choice.NONE fun toRequest(): Request = Request(firstName.get()!!, secondName.get()!!, choice.get()!!) } } 的字段,也将根据此绑定更改选择框的状态,必须手动完成进度,然后触发可见性使用数据绑定。但这真的是处理此类案件的好方法吗?

我看到的缺点是LiveDataData中的整个逻辑将是手动更改值,actionContinue中的值可能为null,因此我们要么必须在任何地方处理ObservableProperties值我们必须使用nullable,说实话,我不觉得这是正确的方向。

也许你们中的任何人都曾考虑过类似的事情,如果我做出了错误的假设或完全不使用!!,最终可能会指出我。显然,有很多关于数据绑定和实时数据等的文章,但是我还没有找到满足我好奇心的文章。哦,不能选择从表单为每个属性创建ObservableProperty

1 个答案:

答案 0 :(得分:0)

RxJava与DataBinding是一个完全不同的概念。它比绑定数据更像是一种处理并发的方法。我100%认为值得学习。 Android社区已张开双臂拥抱它。

无耻的插件:我编译了一段时间的RxJava资源列表-http://gregloesch.com/dev/2014/10/20/resources-for-learning-rxjava-android.html