LiveData. observe внутри observe. Как корректно отписываться?

Коллеги, Прошу помощи ибо новичок ;) Есть Android-приложение которое реализовано в архитектуре Single Activity и есть c десяток экранов (Fragment) Все экраны (Fragment) располагаются во вкладках TabLayout. И между ними можно свободно перемещаться и смотреть различные данные (характеристики авто, тех.обслуживание, страховка, расходы...) А так же изменять данные.

И есть так же боковое drawer-меню с выбором автомобилей.

Почти каждый Fragment слушает события из drawer-меню и в зависимости от выбранного элемента (автомобиля) обновляет данные из Room DataBase на экранах.

Т.е. мне нужно слушать одновременно два LiveData, один из drawer-меню который передаёт ID, а второй LiveData уже из Room DataBase. Мой типичный экран в коде выглядит вот так:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    maintainHistoryViewModel = new ViewModelProvider(requireActivity()).get(MaintainHistoryViewModel.class);
    toolbarViewModel = new ViewModelProvider(requireActivity()).get(ToolbarViewModel.class);
    return inflater.inflate(R.layout.fragment_workspace_maintain_history, container, false);
}

@Override
public void onViewCreated(@NonNull View view, Bundle savedInstanceState) {
    //Слушаем события из drawer-меню
    LiveData<UserVehicle> selectedVehicleLive = toolbarViewModel.getSelectedUserVehicle();
    selectedVehicleLive.observe(getViewLifecycleOwner(), selectedVehicleItem->{
        int vehicleId = selectedVehicleItem.getUserVehicle().getId();
        //Слушаем события из БД и ждём обновления на других экранах
        LiveData<List<UserVehicleMaintain>> vehicleDataLive = maintainHistoryViewModel.getUserVehicleMaintainDataBase(vehicleId);
        vehicleDataLive.observe(getViewLifecycleOwner(), userMaintainState->{                
            //Действия в UI
        });
    });
}

Как вы понимаете, любое событие из drawer-меню подпишем меня на новый LiveData.

LiveData<List<UserVehicleMaintain>> vehicleDataLive = maintainHistoryViewModel.getUserVehicleMaintainDataBase(vehicleId);

А старый наблюдатель ведь никуда не денется. И по прежнему будет слушать getUserVehicleMaintainDataBase со своим vehicleId. Хотя он и не нужен во все) Подскажите пожалуйста как тут быть? Как мне отписываться правильно или как мне изменить архитектуру, что ли?)


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