Использование Transformations.switchMap в ViewModel

Доброе время суток уважаемые знатоки android! Дано - Viewmodel с проперти:

public MutableLiveData<ItemEntity> selectedItem = new MutableLiveData<ItemEntity>();

которая при изменении через Transformations, должна вытаскивать список:

private LiveData<List<FileEntity>> filesSelectedItem = Transformations.switchMap(selectedItem, selectedItem -> {
    return itemRepository.getItemFiles(selectedItem);
});

public LiveData<List<FileEntity>> getSelectedItemFiles() {
    return filesSelectedItem;
}

в свою очередь есть Fragment, в onCreateView которого:

viewModel.getSelectedItemFiles().observe(getViewLifecycleOwner(), new Observer<List<FileEntity>>() {
@Override
public void onChanged(@Nullable List<FileEntity> fileEntities) {
    fileAdapter.setItems(fileEntities);
}
});

При открытии фрагмента в первый раз (без разницы какое значение у selectedItem ) все отрабатывает нормально, но при его закрытии и перехода к следующему элементу списка (selectedItem меняется, через него фрагменту передается айдишник сущности файлы которой он запрашивает) и открытию нового фрагмента, onChanged у getSelectedItemFiles() срабатывает два раза, первый раз с fileEntities от предыдущего selectedItem, второй раз уже как положено с fileEntities текущего значения selectedItem, после гугления нашел информацию что трансформация не отрабатывает если нет существующих observe-ров, навешанных на getSelectedItemFiles, и соответственно для второго открытия фрагмента getSelectedItemFiles первый раз возвращает то что у него лежало в dataholder (поле mData у MediatorLiveData?) и только после того как отрабатывает трансформация onChanged возвращает fileEntities текущего элемента. Как костыль я пока сделал в конструкторе ViewModel

filesSelectedItem.observeForever(new Observer<List<FileEntity>>() {
@Override
public void onChanged(List<FileEntity> fileEntities) {
    int nlen = fileEntities.size();
}
});

Как можно реализовать эту логику без использования костылей итд, но с использованием LiveData и трансформации?


Ответы (0 шт):