使用导航组件重新加载片段

var*_*run 7 android android-fragments kotlin android-architecture-navigation

我正在使用导航组件加载我的片段,如下所示:https : //developer.android.com/guide/navigation/navigation-getting-started

navController = findNavController(R.id.nav_host_fragment)
        // Passing each menu ID as a set of Ids because each
        // menu should be considered as top level destinations.
        val appBarConfiguration = AppBarConfiguration(
            setOf(
                R.id.navigation_opt1,
                R.id.navigation_opt2,
                R.id.navigation_opt3,
                R.id.navigation_more
            )
        )
        setupActionBarWithNavController(navController, appBarConfiguration)
        navView.setupWithNavController(navController)
Run Code Online (Sandbox Code Playgroud)

Toolbar在顶部也有一个 Spinner。我想在选择项目fragment时重新加载/刷新& 它的视图模型spinner。我尝试了以下代码进行重新加载,但它不起作用。另外,我知道我们不应该fragmentManager在导航组件中使用

val ftr: FragmentTransaction = requireFragmentManager().beginTransaction()
        ftr.detach(this).attach(this).commit()
Run Code Online (Sandbox Code Playgroud)

任何帮助,将不胜感激。

小智 15

抱歉回复晚了。我在相同的场景中使用下面的代码。这可能有帮助。在微调器 ItemClick 中调用此方法。我们必须使用 popbackstack 来避免一次又一次添加相同的片段。

  private fun refreshCurrentFragment(){
        val id = navController.currentDestination?.id
        navController.popBackStack(id!!,true)
        navController.navigate(id)
    }
Run Code Online (Sandbox Code Playgroud)


Sur*_*shi 5

是的,上面的答案/sf/answers/4632001/..是正确的

如果您想在执行特定操作后重新加载/刷新当前片段,则必须销毁当前片段并再次导航到此处

val fragmentId = findNavController().currentDestination?.id
findNavController().popBackStack(fragmentId!!,true)
findNavController().navigate(fragmentId)
Run Code Online (Sandbox Code Playgroud)