我正在对EditText
. CharSequence
如果它为空或不以"https://"开头,我希望它无效。我也在使用RxBinding,特别是RxTextView
. 问题是,当剩下一个字符时,然后我将其删除,在地图运算符中没有留下任何字符时CharSequence
不会触发发射。换句话说,我希望我的地图运算符在 EditText 为空时返回 false。我开始认为这可能是不可能的,因为我正在这样做。什么是替代方案?
这是我的 Observable / Disposable:
val systemIdDisposable = RxTextView.textChanges(binding.etSystemId)
.skipInitialValue()
.map { charSeq ->
if (charSeq.isEmpty()) {
false
} else {
viewModel.isSystemIdValid(charSeq.toString())
}
}
.subscribe { isValid ->
if (!isValid) {
binding.systemIdTextInputLayout.isErrorEnabled = true
binding.systemIdTextInputLayout.error = viewModel.authErrorFields.value?.systemId
} else {
binding.systemIdTextInputLayout.isErrorEnabled = false
binding.systemIdTextInputLayout.error = viewModel.authErrorFields.value?.systemId
}
}
这是ViewModel
我传递CharSequence
给验证的函数:
fun isSystemIdValid(systemId: String?): Boolean {
return if (systemId != null && systemId.isNotEmpty()) {
_authErrors.value?.systemId = null
true
} else {
_authErrors.value?.systemId =
getApplication<Application>().resources.getString(R.string.field_empty_error)
false
}
}