📜  Android 中的 LiveData 与 ObservableField(1)

📅  最后修改于: 2023-12-03 15:29:21.509000             🧑  作者: Mango

Android 中的 LiveData 与 ObservableField

Android 中的 LiveData 和 ObservableField 是两种数据绑定技术,可以帮助你更加方便地更新 UI,同时也能大大简化代码。

LiveData

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

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 的值绑定时使用。