如何不使用 androidX 破坏片段

how not to destroy fragment with androidX

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

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

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

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

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