我有一个名为 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;
}
}
谢谢