【问题标题】:Setting NavGraph programmatically以编程方式设置 NavGraph
【发布时间】:2018-11-26 16:21:27
【问题描述】:

在我的活动布局中,我有以下NavHostFragment

<fragment
            android:id="@+id/my_nav_host_fragment"
            android:layout_height="match_parent"
            android:layout_width="match_parent"
            android:name="androidx.navigation.fragment.NavHostFragment"
            app:defaultNavHost="true"
            app:navGraph="@navigation/my_nav_graph" />

我的问题是如何以编程方式设置 navGraph?如何在NavHostFragment 实例中转换my_nav_host_fragment 视图实例?

【问题讨论】:

  • val navController = findNavController(R.id.nav_host) val inflater = navController.navInflater val graph = inflater.inflate(R.navigation.navigation_name) navController.graph = graph

标签: android navigation android-jetpack


【解决方案1】:

我找到了解决办法:

//Setup the navGraph for this activity
val myNavHostFragment: NavHostFragment = my_nav_host_fragment as NavHostFragment
val inflater = myNavHostFragment.navController.navInflater
val graph = inflater.inflate(R.navigation.my_nav_graph)
myNavHostFragment.navController.graph = graph

基于:Navigation Architecture Component- Passing argument data to the startDestination

【讨论】:

【解决方案2】:

你可以在你的Activity中写如下。

findNavController(R.id.my_nav_host_fragment).setGraph(R.navigation.my_nav_graph)

【讨论】:

    【解决方案3】:

    当我与 DynamicNavHostFragment 一起使用时,两个答案都导致异常,所以我使用了

    val navHostFragment: NavHostFragment = supportFragmentManager
        .findFragmentById(R.id. my_nav_host_fragment) as NavHostFragment
    
    navHostFragment.findNavController().setGraph(R.navigation. my_nav_graph)
    

    【讨论】:

    • findNavController() 将在所有子视图中搜索控制器并返回第一个控制器,该控制器不为空。如果您嵌套了nav_graphs,您的代码可能会将图形设置为错误的控制器。
    猜你喜欢
    • 1970-01-01
    • 2021-11-21
    • 2011-04-18
    • 2012-07-18
    • 2016-02-15
    • 2014-07-26
    • 1970-01-01
    • 2011-06-06
    • 2012-02-12
    相关资源
    最近更新 更多