gpt4 book ai didi

android - DataBinding ViewModel获取editText大小并将其发送到新 Activity

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

您好,我从MVVM和DataBinding开始,所以我想做的是创建一个简单的viewModel,其中包含一个说名称的字段,当用户单击按钮时,它会检查editText是否为空,如果是,到下一个 Activity (发送名称)。
我试过的是:
这是我的ViewModel

class MainActivityViewModel : ViewModel() {

private val _userName = MutableLiveData<String>()

val username : LiveData<String> = _userName

//Here I'd like to know if I have to use MutableLiveData<NameStatus> and this name status is Filled / Empty so my activity can react to it and show an error or something

//And then when tapping the button it should check the edittext value and send it to next activity.


}
我还考虑过在布局中添加一些内容,例如,如果editText大小为0,则禁用按钮,这可能是一个选项,但是我想知道第一个,以便我可以处理状态并对状态使用react。 EditText已填充或为空。

最佳答案

您应该这样修改代码:

class MainActivityViewModel : ViewModel() {

private val _userName = MutableLiveData<String>()
val username: LiveData<String>
get() = _userName

private val _isUserNameNotEmpty = MutableLiveData<Boolean>(false)
val isButtonClickable: LiveData<Boolean>
get() = _isUserNameNotEmpty



fun usernameChanged(text: CharSequence?) {
_userName.postValue(text.toString())
_isUserNameNotEmpty.postValue(!text.isNullOrEmpty())
}

}
这样,您将一个不可变的变量暴露给外部,该变量返回您的私有(private)变量 _userName,您可以在 Activity 中观察它。您需要使viewModel知道编辑文本中的更改,然后观察 Activity 的 onCreate()中它是否不为空,如下所示:
firstName.doOnTextChanged { text, start, count, after ->
viewModel.usernameChanged(text)
}
viewModel.isButtonClickable.observe(this) {
button.isClickable = it
// you can make more actions here like changing the color of the button
}
但是,如果您想使用数据绑定(bind) _userName,则不能再设为私有(private),因为它需要通过编辑文本进行设置,因此您需要像这样将 viewModel设置为:
val userName = MutableLiveData<String>()

private val _isUserNameNotEmpty = MutableLiveData<Boolean>(false)
val isButtonClickable: LiveData<Boolean>
get() = _isUserNameNotEmpty
没有更多的功能!但是您丢失了封装。
现在确保在 Activity 的 onCreate()中放置以下行以使实时数据与数据绑定(bind)一起工作: binding.lifecycleOwner = this,您不再需要之前的代码。
现在,您可以将其与 android:text="@={ viewModel.username }" 中的 textView这样的XML以及按钮xml中的 android:clickable="@{ viewModel.isButtonClickable }" 绑定(bind)

关于android - DataBinding ViewModel获取editText大小并将其发送到新 Activity ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63175544/

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