📅  最后修改于: 2023-12-03 15:29:21.509000             🧑  作者: Mango
Android 中的 LiveData 和 ObservableField 是两种数据绑定技术,可以帮助你更加方便地更新 UI,同时也能大大简化代码。
LiveData 是一个可观察的数据持有者(Observer pattern)。它能够感知与其相关的数据源是否发生了变化,并在订阅者注册时自动通知它们。LiveData 在 Android 应用程序中用于将数据从后台(如数据库)到前台的 UI 层传递。
下面是一个创建 LiveData 实例并更新 UI 的例子:
class MainActivity : AppCompatActivity() {
private lateinit var viewModel: MyViewModel
private lateinit var textView: TextView
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
textView = findViewById(R.id.textView)
viewModel = ViewModelProvider(this).get(MyViewModel::class.java)
viewModel.text.observe(this, Observer { newText ->
textView.text = newText
})
findViewById<Button>(R.id.button).setOnClickListener {
viewModel.setText("New Text")
}
}
}
class MyViewModel : ViewModel() {
val text = MutableLiveData<String>()
fun setText(newText: String) {
text.value = newText
}
}
在该示例中,我们使用 ViewModel 来保存与 UI 相关的数据,使用 MutableLiveData 来将新数据传递给观察者。我们使用 observe() 方法向 LiveData 添加一个观察者,以便在数据发生更改时更新 UI。
ObservableField 是一个自包含的数据持有者,可用于在 ViewModel 和 View 视图之间保持单个值的绑定。它能够感知某个值是否发生了变化,并在变化时通知订阅者。
ObservableField 仅仅是单个变量而已,易于使用。下面是一个使用 ObservableField 更新 UI 的例子:
class MainActivity : AppCompatActivity() {
private lateinit var viewModel: MyViewModel
private lateinit var textView: TextView
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
textView = findViewById(R.id.textView)
viewModel = ViewModelProvider(this).get(MyViewModel::class.java)
viewModel.text.observe(this, Observer { newText ->
textView.text = newText
})
findViewById<Button>(R.id.button).setOnClickListener {
viewModel.text.set("New Text")
}
}
}
class MyViewModel : ViewModel() {
val text = ObservableField<String>("Old Text")
}
在该示例中,我们同样使用 ViewModel 来保存与 UI 相关的数据,使用 ObservableField 来将新数据传递给观察者。我们使用 observe() 方法向 LiveData 添加一个观察者,以便在数据发生更改时更新 UI,这也适用于 ObservableField。
LiveData 和 ObservableField 都是 Android 中的数据绑定技术。LiveData 用于将数据从后台传递到前台 UI 层,而 ObservableField 可用于在 ViewModel 和 View 视图之间保持单个值的绑定。两者都能够感知某个值是否发生了变化,并在变化时自动通知订阅者。LiveData 应该在需要通过数据源获取数据时使用,而 ObservableField 应该在需要保持从 ViewModel 到 View 的值绑定时使用。