0

下面是我的应用程序的结构

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");
                }
            }
        });



4

0 回答 0