首页 > 解决方案 > 为什么私有集不适用于 MutableLiveData?

问题描述

我有一个代码

var exampleData = MutableLiveData<String>()
    private set

而且我想将设置器隐藏到 MutableLiveData 的值

    exampleData.value = "Hi!" // still working

我尝试了几种方法,但都有效!

var exampleData = MutableLiveData<String>()
    private set(value) { field = value } // Working!

var exampleData = MutableLiveData<String>()
    internal set // Working!

var exampleData = MutableLiveData<String>()
    internal set(value) { field = value } // Working!

如何隐藏这个二传手?

标签: androidkotlinandroid-architecture-components

解决方案


属性的 setter 与您的 无关MutableLiveData,因为它在对象本身内是可变的。您必须将其转换为LiveData,您可以使用支持属性来完成。

private val _exampleData = MutableLiveData<String>()
val exampleData: LiveData<String> get() = _exampleData

您可以私下更改值_exampleData.value = "value"并仅公开不可变的LiveData.


推荐阅读