1

我的应用程序中有多个 RecyclerView。每一个都包含相同的记录,但具有不同的过滤器。例如,第一个 RecyclerView 包含新记录,第二个 RecyclerView 包含最流行的,等等。

我正在尝试使用不同的过滤器获得“声音”。但最后我得到了 2 个相同的列表。

我的视图模型:

private var recentlyAddedVoices = MutableLiveData<List<VoicesModel>>()
private val topFreeVoices = MutableLiveData<List<VoicesModel>>()


private val favExists = MutableLiveData<Boolean>()

private val addToFavoriteResult = MutableLiveData<Boolean>()


val homeVoicesData: MutableLiveData<Pair<List<VoicesModel>?, List<VoicesModel>?>> =
        object: MediatorLiveData<Pair<List<VoicesModel>?, List<VoicesModel>?>>() {

            var voices: List<VoicesModel>? = null
            var freeVoices: List<VoicesModel>? = null

            init {
                addSource(recentlyAddedVoices) { voices ->
                    this.voices = voices
                    voices?.let { value = voices to it }
                }
                addSource(topFreeVoices) { free ->
                    this.freeVoices = free
                    freeVoices?.let { value = freeVoices to it }
                }
            }
        }


fun loadRecentlyAddedVoices(){
    REF_DATABASE_ROOT.child(NODE_STICKERS).addValueEventListener(object :
            ValueEventListener {
        override fun onDataChange(snapshot: DataSnapshot) {

            val tmpList: MutableList<VoicesModel> = mutableListOf()
            for (ds in snapshot.children) {
                val voices: VoicesModel? = ds.getValue(VoicesModel::class.java)
                voices!!.pushKey = ds.key.toString()

                tmpList.add(voices)
            }
            recentlyAddedVoices.postValue(tmpList)
        }

        override fun onCancelled(error: DatabaseError) {

        }

    })
}


fun loadTopFree(){
    REF_DATABASE_ROOT.child(NODE_STICKERS).
    orderByChild(CHILD_IS_FREE).
            equalTo(true).
    addValueEventListener(object : ValueEventListener {
        override fun onDataChange(snapshot: DataSnapshot) {
            val tmpList: MutableList<VoicesModel> = mutableListOf()
            for (ds in snapshot.children) {
                val voices: VoicesModel? = ds.getValue(VoicesModel::class.java)
                voices!!.pushKey = ds.key.toString()

                tmpList.add(voices)
            }
            topFreeVoices.postValue(tmpList)
        }

        override fun onCancelled(error: DatabaseError) {

        }

    })
}

在片段中观察:

firebaseViewModel.homeVoicesData.observe(this){ (recentlyAdded, topFree) ->
        // recentlyAdded and topFree equals identical value
        UpdateUI()
    }
4

0 回答 0