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

w6mmgewl  于 2022-11-14  发布在  Android
关注(0)|答案(2)|浏览(244)

我正在使用导航组件加载我的片段,如下所示: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)

我也有一个Toolbar在顶部与一个微调。我想重新加载/刷新fragment及其视图模型时,spinner项目被选中。我尝试了下面的代码重新加载,但它不工作。而且,我知道我们不应该使用fragmentManager在导航组件

val ftr: FragmentTransaction = requireFragmentManager().beginTransaction()
        ftr.detach(this).attach(this).commit()

任何帮助都将不胜感激。

nfzehxib

nfzehxib1#

很抱歉回复的太晚了。2我正在用下面的代码来处理同样的场景。3这可能会有帮助。4在你的旋转器ItemClick中调用这个方法。5我们必须使用popbackstack来避免一次又一次的添加相同的片段。

private fun refreshCurrentFragment(){
        val id = navController.currentDestination?.id
        navController.popBackStack(id!!,true)
        navController.navigate(id)
    }
y53ybaqx

y53ybaqx2#

上面的答案https://stackoverflow.com/a/66171..是正确的
如果您想在执行特定操作后重新加载/刷新您当前片段,您必须销毁此当前片段并再次导航到此处

val fragmentId = findNavController().currentDestination?.id
findNavController().popBackStack(fragmentId!!,true)
findNavController().navigate(fragmentId)

相关问题