Ниже представлена структура моего приложения
MainActivity
|-- HomeFragment
| |-- ViewPager
| |-- FirstViewFragement
| |-- SecondViewFragementme
| |-- ThirdViewFragement
|-- SettingFragment
|-- OtherFragment
Поток приложения отображается ниже визуально, если требуется.
![enter image description here](https://i.stack.imgur.com/RTboy.png)
Описание : у меня есть DataViewModel, который позволяет моему приложению отправлять данные из MainActivity и другого фрагмента в другой фрагмент или дочерний фрагмент.
В моей модели DataViewModel у меня есть два данных, которые мне нужно отправить в CanvasView (расширяет представление) в представлениях внутри окна просмотра. Первые данные поступают из MainActivity (данные датчика), а другие данные поступают из HomeFragment (данные состояния) в представления внутри viewPager. CanvasView <внутри каждого <view внутри <viewpager получает данные от Mainactivty и HomeFragment. Эти представления получают данные в зависимости от того, какой вид виден пользователю. (<em> Я просто проверяю текущую позицию viewpager и отправляю позицию наблюдателю viewmodel внутри этого CanvasView и получаю данные ).
Проблема : Когда я запускаю приложение в первый раз, я получаю данные на firstViewFragment, но как только я смахиваю, я больше не могу получать данные в наблюдателе этих CanvasView , кроме последнего. Последний всегда получает данные независимо от того, сколько раз я смахиваю, но предыдущие представления перестают получать данные.
/* MainActivity.class*/
private FusionViewModel fusionViewModel;
dataViewModel = new ViewModelProvider(this).get(DataViewModel.class); // passing 'this' as an owner in main activity.
if(sensor.data()>0){
dataViewModel.setState(true);
}
/*CanvasView extends View*/
private FusionViewModel fusionViewModel;
dataViewModel= new ViewModelProvider((ViewModelStoreOwner) ctx).get(DataViewModel.class); // tried getContext() works as well as with ctx.
dataViewModel.getState().observe((LifecycleOwner) ctx, new Observer<Boolean>() {
@Override
public void onChanged(@Nullable Boolean bool) {
if(viewPagerPosition==0){
pressed=bool;
Log.d("STATE","Received");
}
}
});