3

我有一个名为 Transaction {} 的超类,还有两个扩展它的类

InTransaction 和 OutTransaction。

InTransaction 链接到另一个名为 Source 的 Room 实体,而 OutTransaction 链接到另一个名为 Category 的实体。

我能够单独观察每种类型的模型,它返回PagedList<? extends Transaction>.

在我的 PagedListAdapter 中,我想显示这两种类型的项目。但是我的 MediatorLiveData 实现似乎无法正常工作。似乎最近的类型替换了旧的类型,因此只显示一种类型的交易。

我希望能够看到所有类型的交易。以下是我当前的代码。

transactionLiveData = new MediatorLiveData<>();
transactionLiveData.addSource(inTransactionViewModel.getItems(), transactionLiveData::setValue);
transactionLiveData.addSource(outTransactionViewModel.getItems(), transactionLiveData::setValue);
transactionLiveData.observe(requireActivity(), transactionAdapter::submitList);

我确实了解 MediatorLiveData 不会为您进行合并,而只是通知您更改。

如何将两者合并PagedList为一个然后提交到列表?

我正在考虑做这样的事情,但不知道如何实例化聚合器PagedList

class TransactionMerger extends MediatorLiveData<PagedList<? extends Transaction>> {
        PagedList<? extends Transaction> inTransactions;
        PagedList<? extends Transaction> outTransactions;
        PagedList<? extends Transaction> aggregator;

        TransactionMerger(){            
        }

        @Override
        public void observe(@NonNull LifecycleOwner owner, @NonNull Observer<? super PagedList<? extends Transaction>> observer) {
            super.observe(owner, observer);
        }

        @Override
        public void setValue(PagedList<? extends Transaction> value) {
            if (isInTransactionList(value)) {
                inTransactions = value;
            }else{
                outTransactions = value;
            }
            // TODO Merge the two
            aggregator = mergeLists(inTransactions, outTransactions);
            super.setValue(aggregator );
        }

        private boolean isInTransactionList(PagedList<? extends Transaction> list) {
            return list != null && list.size() > 0 && list.get(0).getTransactionType() == Transaction.TransactionType.In;
        }
    }

谢谢

4

0 回答 0