下面是我的应用程序的结构
MainActivity
|-- HomeFragment
| |-- ViewPager
| |-- FirstViewFragement
| |-- SecondViewFragementme
| |-- ThirdViewFragement
|-- SettingFragment
|-- OtherFragment
如果需要,应用程序流会在下方直观地显示。
描述:我有 DataViewModel,它允许我的应用程序将数据从 MainActivity 和不同的 Fragment 发送到另一个 Fragment 或子 Fragment。
在我的 DataViewModel 中,我有两个数据需要发送到 viewpager 内视图中的 CanvasView(扩展视图)。第一个数据来自 MainActivity(传感器数据),另一个数据来自 HomeFragment(状态数据)到 viewPager 内的视图。<viewpager 中的每一个<view 中的 CanvasView< 接收来自 Mainactivty 和 HomeFragment 的数据。这些视图接收基于哪个视图对用户可见的数据。(我只是检查 viewpager 的当前位置并将位置发送到这些 CanvasView 内的 viewmodel 观察者并接收数据)。
问题:当我第一次启动应用程序时,我在 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");
}
}
});