有没有办法使用LiveData观察器来动态管理片段流导航?

时间:2019-05-07 19:21:04

标签: android android-fragments android-viewmodel

我是Android开发的新手,我最近开始创建新的应用程序。

请考虑您的应用程序具有2个活动:MainActivity & TourneeFlowActivity。另外,您有3个片段(在示例中,我将其称为StartTourneeFragment, ValidateTourneeFragment and EndingTourneeFragment)。

我已经实现了Room and Repository模式,用于检索本地和远程数据。另外,我已经实现了ViewModels,以使用观察者刷新和管理UI数据(LiveData)。

在TourneeFlowActivity内,我有一个fragmentNavigationImplementation(对象类),用于我的片段导航流程(例如:在活动中使用回调侦听器,从StartTourneeFragment切换到ValidateTourneeFragment)。

目前,仅在捕获到的用户事件(例如单击按钮NextPrevious)上调用片段导航。

是否可以在对象属性更改时使用观察者来触发类似回调的操作,该回调可以动态更改片段?

代码示例不是我要做的,而是用于说明我想执行哪种机制...

我希望我对此很清楚。

public class TourneeFlowActivity extends Activity {
      private FragmentNavigationImpl fragmentNavigation;
      private BordereauViewModel bordereauViewModel;
      @Override
      public void onCreate() { 
          /// Some initializations
          this.bordereau = ViewModelProviders.of(this).get(BordereauViewModel.class);
      }

      @Override
      protected onActivityCreated(){
           this.bordereauViewModel.getCurrentBorderau().observe(this, new Observer<Bordereau>{
                @Override
                public onChanged(@Nullable Bordereau bordereau) {
                // Here my value has been changed so I would start a new fragment dynamically
                    if(bordereau != null && bordereau.getStep() == MyEnum.STEP_TO_ENDING) {

                        if(fragmentNavigation.getCurrentFragment() 
                                    instanceof ValidateTourneeFragment) 
                        {
                            EndingFragment fragment = new EndingFragment();
                            fragmentNavigation.nextFragment(fragment);
                        }
                    }
                }
            });
      }

}

0 个答案:

没有答案