Есть ли лучший способ выставить частные MutableLiveData в качестве LiveData для ViewModel. [Android, Котлин] - PullRequest
0 голосов
/ 05 апреля 2020

В следующем примере я хочу открыть список Int следующим образом:

    val test: LiveData<List<Int>>
        get() = _test as LiveData<List<Int>>

    private var _test = MutableLiveData(mutableListOf<Int>())

или другим способом:

    private var _test2 = MutableLiveData(mutableListOf<Int>())
    val test2 = _test2 as LiveData<List<Int>>

Оба работают, но всегда есть Unchecked Cast.

Unchecked cast: MutableLiveData<MutableList<Int>!> to LiveData<List<Int>>

Есть ли лучший способ сделать это?


Просто чтобы уточнить:

С использованием emptyList использование может выглядеть так:

class MainViewModel : ViewModel() {
    val test: LiveData<List<Int>> get() = _test
    private var _test = MutableLiveData(emptyList<Int>())

    init {
        val myPrivateList = mutableListOf<Int>()
        myPrivateList.add(10)
        myPrivateList.add(20)

        _test.value = myPrivateList
    }
}

Я надеялся найти способ сделать это без дополнительного списка (myPrivateList), что-то вроде этого:

class MainViewModel : ViewModel() {
    val test: LiveData<List<Int>> get() = _test
    private var _test = MutableLiveData(emptyList<Int>())

    init {
        _test.value?.apply {
            add(1)
            add(2)
            add(3)
        }
    }
}

1 Ответ

2 голосов
/ 05 апреля 2020

Вы можете использовать emptyList<Int>() или listOf<Int>(), чтобы создать MutableLiveData, избегая неконтролируемого приведения:

val test: LiveData<List<Int>> get() = _test
private var _test = MutableLiveData(emptyList<Int>())

Если ваш код был просто примером вашего реального варианта использования, помните, что вы всегда можете используйте .toList() на вашем MutableList.

...