gpt4 book ai didi

android - 如何使用 RxTextView (RxBinding) 检测 EditText 何时为空

转载 作者:行者123 更新时间:2023-12-02 13:44:56 24 4
gpt4 key购买 nike

我正在对 EditText 进行验证.我想要 CharSequence如果为空或不以 开头,则无效"https://" .我也在使用 接收绑定(bind) ,特别是 RxTextView .问题是当剩下一个字符时,我将其删除,在 CharSequence 中没有留下任何字符。 map 运算符(operator)不会发射发射。换句话说,我希望我的 map 运算符在 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
}
}

最佳答案

睡了之后,我就明白了。

我改了RxTextView.textChangesRxTextView.textChangeEvents .这让我可以查询 CharSequence的文本值(使用 text() 提供的 textChangeEvents 方法),即使它是空的。由于其他一些变化(与我在这个问题中提出的问题并不真正相关),我也能够减少一些条件代码。我只是把它放在那里,以防有人遇到这个并对这些变化感到好奇。要点是您可以使用 RxTextView.textChangeEvents 获得空发射。 .

这是我的新观察员:

 val systemIdDisposable = RxTextView.textChangeEvents(binding.etSystemId)
.skipInitialValue()
.map { charSeq -> viewModel.isSystemIdValid(charSeq.text().toString()) }
.subscribe {
binding.systemIdTextInputLayout.error = viewModel.authErrors.value?.systemId
}

这是我在 ViewModel 中的验证代码:
fun isSystemIdValid(systemId: String?): Boolean {

val auth = _authErrors.value

return if (systemId != null && systemId.isNotEmpty()) {
auth?.systemId = null
_authErrors.value = auth
true
} else {
auth?.systemId =
getApplication<Application>().resources.getString(R.string.field_empty_error)
_authErrors.value = auth
false
}
}

最后,如果有人对我如何使用我的 LiveData/MutableLiveData 对象感到好奇;我创建了一个私有(private)的 MutableLiveData 对象,并且只公开了一个不可变的 LiveData 对象,该对象返回第一个对象的值。我这样做是为了更好地封装/数据隐藏。这是一个例子:
private val _authErrors: MutableLiveData<AuthErrorFields> by lazy {
MutableLiveData<AuthErrorFields>()
}
val authErrors: LiveData<AuthErrorFields>
get() { return _authErrors }

希望这对某人有帮助! 🤗

关于android - 如何使用 RxTextView (RxBinding) 检测 EditText 何时为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59675830/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com