RecyclerView Adapter在更新不同的可观察对象时更改列表

问题描述 投票:0回答:1

我正在使用Room库和Lifecycles开发一个android应用程序。当前,我有两个List Livedata,并通过使用MediatorLivedata和一个recyclerview适配器具有一个Observable流。该应用程序在tablayout中有两个选项卡,每个选项卡都有自己的列表,这些列表具有相同的数据类型但值不同。例如,Livedata1 = Tab1,Livedata2 = Tab2

[当用户选择tab2时,列表更改为tab2,然后返回Tab1,列表更改为tab1并更新tab1中的当前项目,即使我没有更改此选项卡,列表也更改为tab2。

如何解决该问题?

我已经尝试在“用户更改”选项卡上删除MediatorLivedata中的数据源,但问题仍然相同

// ViewModel

private var getAllListOfOrders = MediatorLiveData<List<OrderEntities>>()

init {
    getAllListOfOrders.addSource(getAllListPreparingOrders){ getAllListOfOrders.value = it }
}


fun getAllOrders() : LiveData<List<OrderEntities>>{
    return getAllListOfOrders
}

fun isForPickUp(tabName: String){
    if (!tabName.equals("For Preparing", true)){
        getAllListOfOrders.addSource(getAllListPickUpOrders){
            getAllListOfOrders.value = it
            getAllListOfOrders.removeSource(getAllListPickUpOrders)}

    }else{
        getAllListOfOrders.addSource(getAllListPreparingOrders){
            getAllListOfOrders.removeSource(getAllListPickUpOrders)
            getAllListOfOrders.value = it }
    }
}

//活动

orderViewModel.getAllOrders().observe(this, Observer {
        adapter.setOrderList(it as ArrayList<OrderEntities>)
    })

// RecyclerView适配器

   fun setOrderList(orderList : ArrayList<OrderEntities>){
    this.orderList = orderList
    notifyDataSetChanged()
}

用户未更改选项卡列表未更改时的预期结果

android kotlin android-lifecycle
1个回答
0
投票

我注意到您代码中的某些内容。尝试更换:

if (!tabName.equals("For Preparing", true)){
        getAllListOfOrders.addSource(getAllListPickUpOrders){
            getAllListOfOrders.value = it
            getAllListOfOrders.removeSource(getAllListPickUpOrders)}

    }

with:

if (!tabName.equals("For Preparing", true)){
        getAllListOfOrders.addSource(getAllListPickUpOrders){
            getAllListOfOrders.value = it
            getAllListOfOrders.removeSource(getAllListPreparingOrders)}

    }

因为看起来您从未删除getAllListPreparingOrders作为来源。

© www.soinside.com 2019 - 2024. All rights reserved.