gpt4 book ai didi

android - 为什么 LiveData 不更新? (安卓、 Kotlin )

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

如何将 MutableLiveData 公开为 LiveData?

下面的代码不起作用。

SimpleMixerFragment.kt

private lateinit var binding: MixerSimpleFragmentBinding
private lateinit var viewModel: SimpleMixerViewModel

override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {

// Inflate view and obtain an instance of the binding class
binding = DataBindingUtil.inflate(
inflater,
R.layout.mixer_simple_fragment,
container,
false
)

viewModel = ViewModelProvider(this).get(SimpleMixerViewModel::class.java)

binding.simpleMixerViewModel = viewModel

binding.lifecycleOwner = viewLifecycleOwner

return binding.root
}

SimpleMixerViewModel.kt
class SimpleMixerViewModel : ViewModel() {

private val _etDate = MutableLiveData<String>()
val etDate: LiveData<String>
get() = _etDate
}

Mixer_simple_fragment.kt
<variable name="simpleMixerViewModel" type="....SimpleMixerViewModel" />

<com.google.android.material.textfield.TextInputEditText
android:id="@+id/etDate"
android:text="@{simpleMixerViewModel.etDate}"/>

这可以代替。

SimpleMixerViewModel.kt
class SimpleMixerViewModel : ViewModel() {

val etDate = MutableLiveData<String>()
}

Mixer_simple_fragment.xml
<variable name="simpleMixerViewModel" type="....SimpleMixerViewModel" />

<com.google.android.material.textfield.TextInputEditText
android:id="@+id/etDate"
android:text="@={simpleMixerViewModel.etDate}"/>

最佳答案

@{}注册单向绑定(bind),这意味着如果您修改 MutableLiveData从代码中,然后它将更改传播到 EditText .
@={}注册双向绑定(bind),这意味着如果您修改 MutableLiveDataandroid:text属性,那么它将更新 MutableLiveData -> android:textandroid:text -> MutableLiveData (以被修改者为准)。

要使用双向绑定(bind),您必须公开 LiveData 的可变版本,以便绑定(bind)可以将 EditText 的新值写入 MutableLiveData。

关于android - 为什么 LiveData 不更新? (安卓、 Kotlin ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61528746/

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