Android 双向数据绑定仅以一种方式工作
Android two-way data binding working one way only
这个问题困扰我一段时间了,希望有人能帮帮我
我第一次尝试实现双向数据绑定,但我遇到了一个奇怪的问题。
这里的问题是,每次我从视图模型中设置实时数据的值时,UI 都会发生变化,但是当我更改 UI 上的编辑文本值时,它不反映视图模型实时数据值。
似乎 双向 数据绑定仅在 单向 工作,当从视图模型
设置值时
我有我的视图模型,像这样:
class CreateAssignmentViewModel(): ViewModel() {
val assignment = MutableLiveData<String>()
}
然后我的 activity:
class CreateAssignmentActivity: AppCompatActivity() {
private val createViewModel: CreateAssignmentViewModel by viewModel()
private lateinit var viewBinding: ActivityCreateAssignmentBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
viewBinding = DataBindingUtil.setContentView(this, R.layout.activity_create_assignment)
viewBinding.lifecycleOwner = this
viewBinding.createViewModel = createViewModel
}
}
然后在我的 activity xml:
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
<import type="android.view.View" />
<variable
name="createViewModel"
type="com.marcelo.tasks.assignments.create.CreateAssignmentViewModel" />
</data>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".assignments.create.CreateAssignmentActivity">
<EditText
style="@style/Base.EditText"
android:text="@{createViewModel.assignment}" />
</LinearLayout>
</layout>
实际上您并没有在您的视图中设置双向数据绑定。您必须使用 @={}
进行双向数据绑定。检查以下内容:
使用
<EditText
android:text="@={createViewModel.assignment}" />
而不是
<EditText
android:text="@{createViewModel.assignment}" />
这个问题困扰我一段时间了,希望有人能帮帮我
我第一次尝试实现双向数据绑定,但我遇到了一个奇怪的问题。
这里的问题是,每次我从视图模型中设置实时数据的值时,UI 都会发生变化,但是当我更改 UI 上的编辑文本值时,它不反映视图模型实时数据值。 似乎 双向 数据绑定仅在 单向 工作,当从视图模型
设置值时我有我的视图模型,像这样:
class CreateAssignmentViewModel(): ViewModel() {
val assignment = MutableLiveData<String>()
}
然后我的 activity:
class CreateAssignmentActivity: AppCompatActivity() {
private val createViewModel: CreateAssignmentViewModel by viewModel()
private lateinit var viewBinding: ActivityCreateAssignmentBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
viewBinding = DataBindingUtil.setContentView(this, R.layout.activity_create_assignment)
viewBinding.lifecycleOwner = this
viewBinding.createViewModel = createViewModel
}
}
然后在我的 activity xml:
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
<import type="android.view.View" />
<variable
name="createViewModel"
type="com.marcelo.tasks.assignments.create.CreateAssignmentViewModel" />
</data>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".assignments.create.CreateAssignmentActivity">
<EditText
style="@style/Base.EditText"
android:text="@{createViewModel.assignment}" />
</LinearLayout>
</layout>
实际上您并没有在您的视图中设置双向数据绑定。您必须使用 @={}
进行双向数据绑定。检查以下内容:
使用
<EditText
android:text="@={createViewModel.assignment}" />
而不是
<EditText
android:text="@{createViewModel.assignment}" />