• 1000 сущность с именем 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;
}
}
Спасибо