如何使用 Kotlin 访问 LiveData<List<MVoice>> 的每个元素?
How to access each element of LiveData<List<MVoice>> with 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)
}
}
最好使用 forEach
即 具有相同功能的内联函数。
它允许您使用安全调用 (?.
) 而不是非空断言 (!!
):
fun selectAllIDs() {
listVoiceBySort.value?.forEach {
selectedIDs.add(it.id)
}
}
另一种方法是将 MVoice
元素映射到它们的 id,然后将它们全部添加到 selectedIDs
:
fun selectAllIDs() {
listVoiceBySort.value?.map { it.id }?.let {
selectedIDs.addAll(it)
}
}
通常情况下,livedata 中的数据是通过观察者访问的,在那里您可以获得 non-null 值
listVoiceBySort.observe(lifecycleOwner, Observer {
for(mVoice in it){
...
}
}
代码 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)
}
}
最好使用 forEach
即 具有相同功能的内联函数。
它允许您使用安全调用 (?.
) 而不是非空断言 (!!
):
fun selectAllIDs() {
listVoiceBySort.value?.forEach {
selectedIDs.add(it.id)
}
}
另一种方法是将 MVoice
元素映射到它们的 id,然后将它们全部添加到 selectedIDs
:
fun selectAllIDs() {
listVoiceBySort.value?.map { it.id }?.let {
selectedIDs.addAll(it)
}
}
通常情况下,livedata 中的数据是通过观察者访问的,在那里您可以获得 non-null 值
listVoiceBySort.observe(lifecycleOwner, Observer {
for(mVoice in it){
...
}
}