首页 > 解决方案 > 如何访问 LiveData 的每个元素> 使用 Kotlin?

问题描述

代码 A 用于for (aMovice in listVoiceBySort.value!!)访问LiveData<List<MVoice>>.

但我认为这不是一个好方法,因为它使用listVoiceBySort.value!!,它很丑。

有没有访问每个元素的好方法LiveData<List<MVoice>>

代码 A

 val listVoiceBySort: LiveData<List<MVoice>> =_listVoiceBySort

 fun selectAllIDs(){
   for (aMovice in listVoiceBySort.value!!){
            selectedIDs.add(aMovice.id)
    }
 }

标签: androidkotlinandroid-livedata

解决方案


使用具有相同功能的内联函数会更好。它允许您使用安全调用 ( ) 而不是非空断言 ( ):forEach ?.!!

fun selectAllIDs() {
    listVoiceBySort.value?.forEach {
        selectedIDs.add(it.id)
    }
}

另一种方法是将MVoice元素映射到它们的 id,然后将它们全部添加到selectedIDs

fun selectAllIDs() {
    listVoiceBySort.value?.map { it.id }?.let {
        selectedIDs.addAll(it)
    }
}

推荐阅读