【问题标题】:Android make value from multiple EditTexts to a class?Android从多个EditTexts为一个类创造价值?
【发布时间】:2021-01-11 18:07:13
【问题描述】:

我正在使用数据绑定,当用户填写多个编辑文本时,我正在尝试使用这些值创建一个类,并进行一些验证。

类是这样的

data class Person(
    var name: String,
    var age: Int,
    var email: String
)

视图模型变量,

val person: MutableLiveData<Person> by lazy { MutableLiveData<Person>()}

模板

<EditText
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:inputType="text"
    android:text="@{viewModel.person.name}" />
<EditText
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:inputType="number"
    android:text="@{viewModel.person.age}" />
<EditText
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:inputType="textEmailAddress"
    android:text="@{viewModel.person.email}" />

点击按钮,我正在尝试打印出对象,

binding.savebtn.setOnClickListener {
    Log.d("debug", "${viewModel.person.value}:")
}

它会打印出D/debug: null:

我正在尝试在验证后创建房间实体。我怎样才能做到这一点?

【问题讨论】:

  • 这就是你要找的,Two way data binding
  • 看看下面的答案,我希望你会感谢你的努力。

标签: java android kotlin android-livedata android-databinding


【解决方案1】:

你可以这样做

val person: Person by lazy { Person("","","")}

然后在onclicklistener

binding.savebtn.setOnClickListener {
    Log.d("debug", "${viewModel.person.name},${viewModel.person.email}")
}

您将获得这些值,但问题是,当您更改模型中的值时,它不会反映在 EditText 中,因为这些是普通的 String 对象,而不是 livedataObservableField

让你做,viewModel.person.name="custom name" 它不会改变EditText 中的文本。 如果您的目标是只将输入的文本直接输入模型,那么这将为您完成。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-08-17
    • 1970-01-01
    • 2011-02-15
    • 1970-01-01
    • 1970-01-01
    • 2015-11-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多