如何将MutableLiveData暴露为LiveData?
SimpleMixerFragment.kt.SimpleMixerViewModel。
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}"/>
@{}
注册了一个单向绑定,这意味着如果你修改了 MutableLiveData
的代码,那么它就会将这些变化传播到 EditText
.
@={}
注册了双向绑定,这意味着如果你修改了 MutableLiveData
或 android:text
属性,然后它将更新 MutableLiveData -> android:text
或 android:text -> MutableLiveData
(以被修改的为准)。
要使用双向绑定,你必须暴露LiveData的可变版本,以便绑定可以将EditText的新值写入MutableLiveData中。