【问题标题】:How does Data Binding work with DataBindingUtil.bind vs ActivityBinding.inflate in Android数据绑定如何与 Android 中的 DataBindingUtil.bind 与 ActivityBinding.inflate 一起使用
【发布时间】:2021-05-30 17:32:23
【问题描述】:

我正在学习 MVVM,但我对绑定活动及其视图感到困惑。

在数据绑定课程中,它说,我需要

binding = DataBindingUtil.bind(view) // binding is in the field.

但是 MVVM 课程,它说,我需要

MainActivityBinding.inflate(layoutInflater).also{
    binding = it // binding is in the field
    setContentView(it.root)
}

我正在使用第二个,而 XML 中的 daat 绑定表达式不起作用。 我不知道这是否是一个很好的访问,但我正在尝试从 ViewModel 类中获取数据。

所以,我所做的是,

<layout>
    <data>
        <variable
            name="viewModel"
            type="com.example.my_app.ui.main.MainViewModel"/>
    </data>

    <TextView
        android:text="@{viewModel.user.name}"
    />
    <TextView
        android:text="@{viewModel.getUserHeight()}
    />
</layout>

ViewModel 是

class MainViewModel(
        a: UserData,
): ViewModel() {
    private val _userData = MutableLiveData<UserData>()
    val userData: LiveData<UserData>
        get() = _userData

    init {
        _userData.value = a
        Log.i("view-model", "${_userData.value?.name}")
    }

    fun getUserHeight():String{
        return "${a.value.height}cm"
    }

    override fun onCleared() {
        super.onCleared()
        Log.i("view-model", "MainViewModel destroyed")
    }
}

它不起作用。请您解释一下哪一部分不正确?

【问题讨论】:

  • 确保提供 viewModel 引用来绑定binding.setViewModel(viewModel)
  • 好吧,我愿意viewModel = ViewModelProvider(this, viewModelFactory).get(MainViewModel::class.java)。它有什么问题吗? @JaiprakashSoni

标签: android viewmodel android-databinding


【解决方案1】:

在你的活动中,你应该这样做:

val mainViewModel = MainViewModel()
// I dont know how you provide viewModel in your project, it doesn't matter in this case.
fun onCreate(bundle : Bundle){
  val binding = DataBindingUtil.setContentView(this, R.layout.activity_main)
  binding.viewModel = mainViewModel
}

【讨论】:

    猜你喜欢
    • 2016-04-15
    • 2019-08-22
    • 1970-01-01
    • 2020-01-11
    • 1970-01-01
    • 2017-10-05
    • 2018-05-23
    • 2017-05-10
    • 1970-01-01
    相关资源
    最近更新 更多