如何不使用androidX破坏片段

时间:2018-07-25 06:16:18

标签: android navigation androidx

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

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

1 个答案:

答案 0 :(得分:6)

我也有同样的问题。我正在将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)