7

现在,我尝试了androidX的导航和底部导航栏,当我像下面这样使用它时 supportFragmentManager = getSupportFragmentManager(); navHostFragment =(NavHostFragment)supportFragmentManager.findFragmentById(R.id.frag_nav); navController = navHostFragment.getNavController(); NavigationUI.setupWithNavController(navigation, navController);

发现一个问题,每次切换bottomNavigationBar,fragment会重新创建,目标fragment中的所有网络任务都会重做,androidX切换时如何保持fragment的状态?

4

1 回答 1

14

我也有同样的问题。我将 BottomNavigationView 与导航架构组件一起使用,并且每次都重新创建片段。如您在 Google 问题跟踪器 ( https://issuetracker.google.com/issues/109856764 )中所见,这是预期行为。

所以解决这个问题的正确方法是将当前视图状态保存在 ViewModel 中,并在每个新创建的片段中观察该状态。您需要在 ViewModel 中完成所有网络任务。

还要注意在片段中获取 ViewModel 的方式。如果你这样做viewModel = ViewModelProviders.of(this, viewModelFactory).get(MyViewModel::class.java),ViewModel 将获得片段范围(片段被销毁时它将被销毁)。您必须获得具有活动范围的 ViewModel,以便它可以在片段之间的切换中幸存下来。你可以这样做viewModel = ViewModelProviders.of(activity!!, viewModelFactory).get(MyViewModel::class.java)

于 2018-08-03T09:04:01.410 回答