代码之家  ›  专栏  ›  技术社区  ›  HelloCW

如何使用Kotlin访问LiveData<List<MVoice>>的每个元素?

  •  0
  • HelloCW  · 技术社区  · 4 年前

    代码A的使用 for (aMovice in listVoiceBySort.value!!) 访问每个元素 LiveData<List<MVoice>> .

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

    是否有一种好的方法来访问每个元素 LiveData<列表<MVoice>> ?

    代码A

     val listVoiceBySort: LiveData<List<MVoice>> =_listVoiceBySort
    
     fun selectAllIDs(){
       for (aMovice in listVoiceBySort.value!!){
                selectedIDs.add(aMovice.id)
        }
     }
    
    0 回复  |  直到 4 年前
        1
  •  5
  •   aminography    4 年前

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

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

    另一种方法是绘制地图 MVoice 将元素添加到它们的id中,然后将它们全部添加到 selectedIDs :

    fun selectAllIDs() {
        listVoiceBySort.value?.map { it.id }?.let {
            selectedIDs.addAll(it)
        }
    }
    
        2
  •  0
  •   Trashier Park    4 年前

    通常,livedata中的数据是通过观察者访问的,在那里你会得到一个非空值

    listVoiceBySort.observe(lifecycleOwner, Observer {
        for(mVoice in it){
        ...
        }
    }