如何不使用androidX破坏片段

can*_*wow 5 navigation android androidx

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

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

小智 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)