3

我的活动中有几个片段,每个片段都有自己的Navigation Graph,它们是在创建活动时创建的。我想知道的是如何选择它们中的任何一个作为它们被创建之后defaultNavHostPrimaryNavigationFragment之后?

下面的代码创建它们并将它们设置为默认值,但我不想每次都重新创建它们。我怎样才能做到这一点?

val finalHost = NavHostFragment.create(navigation)

supportFragmentManager.beginTransaction()
    .replace(R.id.navFragment0, finalHost)
    .setPrimaryNavigationFragment(finalHost) // this is the equivalent to app:defaultNavHost="true"
    .commit()
4

1 回答 1

2

找不到代码来做我想做的事,所以这是我的解决方法:

首先删除代码中的#setPrimaryNavigationFragment(finalHost)fromfragmentManager事务,和/或app:defaultNavHost="true"<fragment...>XML 中删除。

然后创建您NavHostFragment的 s 并将它们中的每一个添加到HashMap

private val navHostFragments = HashMap<Int, NavHostFragment?>()

fun createNavHosts() {
    val finalHost: NavHostFragment =
            NavHostFragment.create(navigationId)
            .also { navHostFragments[aHandleToTheNavHost] = it }
}

最后获得正确onBackPressednavControllernavHost 并向上导航:

override fun onBackPressed() {
    if (navHostFragments[aHandleToTheNavHost]?.navController?.navigateUp() == false)
        super.onBackPressed()
}

注意:#navigateUp()返回时false,表示无处可导航。因此,您可以在那里完成活动或您可能想做的任何其他事情。

于 2019-12-02T14:57:08.247 回答