- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是 mvvm 和 rxbinding 的新手。
我正在尝试使用 RxJava 和 DataBinding 将我的 ViewModel 与 android 上下文完全分离。
当我对 ViewModel 的某些代码(即表单验证)进行单元测试时,我的 ObservableFields 不会更改值并且该值保持为空。
我的 ViewModel 的最小示例:
class RegistrationViewModel(var validator: Validator) : ViewModel {
val username: ObservableField<String> = ObservableField()
val password: ObservableField<String> = ObservableField()
var signInButtonEnabled: ObservableField<Boolean>
var emailErrorVisibility: ObservableField<Boolean>
private fun validatePassword(password: String?) = password?.trim()!!.length >= 6
private fun validateUsername(username: String?) = validator.isValid(Validator.Field.EMAIL, username)
init {
val inputValid = Observable.combineLatest(
toObservable(username),
toObservable(password),
BiFunction<String, String, Boolean> { t1, t2 ->
validateUsername(t1) && validatePassword(t2)
}
)
signInButtonEnabled = toField(inputValid)
emailErrorVisibility = toField(toObservable(username).map { t -> !validateUsername(t) })
}
}
@Test
fun test_hideUsernameErrorMessage() {
val validator = mock(RegistrationValidator::class.java)
val viewModel = RegistrationViewModel(validator)
viewModel.username.set("")
assertThat(viewModel.emailErrorVisibility.get(), equalTo(false))
val invalidValue = "ABC"
Mockito.`when`(validator.isValid(Validator.Field.EMAIL, invalidValue)).thenReturn(false)
viewModel.username.set(invalidValue)
assertThat(viewModel.username.get(), equalTo(invalidValue))
assertThat(viewModel.emailErrorVisibility.get(), equalTo(true))
}
viewModel.username.set("")
行之后在这个测试中 viewMode.emailErrorVisibility 的值仍然不是。
最佳答案
数据绑定(bind)在设置绑定(bind)值时尝试高效。更改值时,它会发布以确保您在设置所有值之前完成更改。如果您仍在进行更改,则无需评估更改。
您可以使用 executePendingBindings()
强制评估此类情况下的边界值。 :
viewModel.username.set("")
binding.executePendingBindings()
assertThat(viewModel.emailErrorVisibility.get(), equalTo(false))
关于android - ObservableField 值更改未传播,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47138322/
以下代码: public ObservableField ofFoo = new ObservableField(""); 生成以下警告: Unchecked call to 'ObservableF
我是 mvvm 和 rxbinding 的新手。 我正在尝试使用 RxJava 和 DataBinding 将我的 ViewModel 与 android 上下文完全分离。 当我对 ViewModel
主视图模型如下所示: class MainVM{ public ObservableField title; public ObservableField isFlexible; }
我是 android 数据绑定(bind)的新手。在官方document ,我发现如果您没有太多数据可以 bundle 到 Observable 对象中,则可以使用 ObservableFields(
我正在尝试 Android 的数据绑定(bind)功能,似乎 Observable 字段不会将更改传播到 UI。 如果我扩展 BaseObservable 类,一切都会按预期工作,但是当我切换到 Ob
我正在尝试修改我的应用程序以使用 MVVM。现在,我正在尝试创建一个简单的“密码重置”页面,我试图为其获取文本字段的值:电子邮件地址字段。不幸的是,我的电子邮件字段仍然为空。 viewmodel 可以
我有一个相当简单的数据绑定(bind)布局: navigator.goto(viewModel.insurance, viewModel.title)}" andro
我一直在测试 Livedata 和 AAC。 LiveData 和 ObservableField 的核心区别是什么? 哪个最好,我什么时候应该使用一个而不是另一个? 最佳答案 核心区别在于Obser
我对来自新 Android 架构组件的 LiveData 有疑问。我以前使用过 ObservableField,但想尝试 ACC。 当我在 Activity 中的一个方法中通过 MutableLive
哪个性能更好? @Bindable 使用:notifyPropertyChanged(fieldName) 其中Observablefield 在 set 方法中使用 notifyChange() 来
这是我的布局
我明白 Android's data-binding library 的目的用于观察数据并在数据更改时自动更新的 View 。 问题:数据是否可以观察到其他数据?例如,我能否让一个 Observabl
Stackoverflow 上有多个与 LiveData 和 ObservableField 之间的区别相关的问题。另外,我在互联网上找到了多篇关于这个主题的文章。他们都解释说 LiveData 与
我有一个简单的应用程序 - Button - 它从 rest api 和显示此数据的 TextView 获取数据。我正在使用 MVVM 架构模式。当 ViewModel 收到带有获取数据的回调时,我将
ObservableField里面的值 ViewModel使用 EditText 更改类值在布局中,但是值不会传播到 TextView tv_summary . 这是布局
在测试应用程序中,我有一个 Activity ,其中包含一个 Edittext 和一个 Button。 Edittext 指向人名的 ObservableField 并单击按钮,我正在修改人名,以便更
我将 Kotlin 版本更新到 1.2.31 并收到以下警告。 Do not explicitly call 'get()' on ObservableFields or 'getValue()' o
将 Android Studio 更新到 3.1.0 并将 kotlin 版本更新到 1.2.31 后,我Observables 有问题。 someVm 值为空。 class ViewModel1(c
我有一个父类,我们称它为 BaseViewModel,这个类可以被键入并且有一个相同类型的 ObservableField。像这样: public class BaseViewModel extend
我已经使用了一段时间的数据绑定(bind),即使现在 JDK 8 和 API 24 也不可用。我仍然找到一种以更简单的方式使用数据绑定(bind)的方法。但是当我使用下面的方式进行精确的双向数据绑定(
我是一名优秀的程序员,十分优秀!