android - 为什么私有(private)集不适用于 MutableLiveData?

标签 android kotlin android-architecture-components

我有密码

var exampleData = MutableLiveData<String>()
    private set

我想将 setter 隐藏到 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!

如何隐藏这个setter?

最佳答案

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

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

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

关于android - 为什么私有(private)集不适用于 MutableLiveData?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53593231/

相关文章:

android - 直接跳转到 android recyclerview 中的最后一个位置,而不是滚动到最后一个位置

android - Proguard/R8 正在为 Jackson 缩小 Kotlin 数据类中的 @JsonProperty 注释名称

kotlin - 判断reified类型是否可以为空

android - StartActivityForResult 与 MVVM 架构组件

android - 隐藏操作栏的标题在旧版本的 Android 上不起作用(使用 ActionBarSherlock)

java - Android 的 JGoodies?

Android 旋转矩形和理解 Canvas

android - AssertionError:根包必须初始化

android - 如何确保在 Android 单元测试中调用 ViewModel#onCleared?

java - 房间@查询错误 : Cannot find method parameters