为什么私有集对MutableLiveData不起作用?

时间:2018-12-03 11:48:18

标签: 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!

如何隐藏此二传手?

2 个答案:

答案 0 :(得分:5)

属性的设置器与您的MutableLiveData无关,因为它在对象本身内部具有可变性。您必须将其转换为LiveData,可以使用后备属性来完成。

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

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

答案 1 :(得分:0)

LiveDataMutableLiveData的文档中可以看出,LiveData中的setValue()postValue()方法不是公开的。而在MutableLiveData中可以访问它们。因此,如果要使它们不可访问,请将其更改为LiveData,而不要使用MutableLiveData