我有一个EditText字段,我想为此检查验证输入。
我应用了MVVM +数据绑定,并在ViewModel中调用onTextChanged()方法
来源:
xml
android:onTextChanged="@{(text, start, before, count) -> viewModel.onMyTextChanged(text)}"
ViewModel.kt
fun onMyTextChanged(text) {
// Show icon error if invalid, Show icon check done if valid
val isValid = MyValidation(text).checkValid()
}
MyValidation.kt
class MyValidation(text: String){
fun checkValid(): Boolean {
// Check text here with Regex Pattern
<-- TODO -->
// Check instance time of class
Log.d("INSTANCE", this.hashCode().toString() )
}
}
控制台日志:
INSTANCE : 159625389
INSTANCE : 178364275
INSTANCE : 190324272
...
问题:
在EditText字段中输入文本时,将以执行时间=输入文本的长度来调用onMyTextChanged方法。
因此,MyValidation类的实例也增加了。
(请参阅日志)
我正在考虑使用Object而不是Class来使Singleton静态化。但我感到困惑的是,在这种情况下还有其他解决方案吗?
答案 0 :(得分:0)
对于您的用例,您可以使用Kotlin's extension Function来检查文本的有效性,而无需单独的类来检查有效性。扩展功能也将非常方便使用。
将以下代码写在与u检查字符串有效性相同的位置,但不在类主体内。
fun String.isValidString(): Boolean {
// use this.length etc to refer to current string
// Check text here with Regex Pattern
<-- TODO -->
// log your String
Log.d("Your String", this)
}
然后您的代码将如下所示:
fun onMyTextChanged(text) {
// Show icon error if invalid, Show icon check done if valid
val isValid = text.isValidString()
}
额外: Reference