android 当打开片段时,是否有方法将boolean作为参数传递给NavController?

mzsu5hc0  于 2023-06-20  发布在  Android
关注(0)|答案(1)|浏览(161)

活动中有这样一种方法,负责通过URI打开碎片

  1. ...
  2. fun navigate(uri: Uri, savedInstanceState: Bundle?) {
  3. with(supportFragmentManager.findFragmentById(R.id.nav_host_fragment) as NavHostFragment) {
  4. val authGraph: NavGraph = navController.navInflater.inflate(R.navigation.auth_nav_graph)
  5. maybeSetIapNavGraphs(navHostFragment.navController, authGraph)
  6. navController.graph = authGraph
  7. if (savedInstanceState == null) {
  8. navController.popBackStack()
  9. navController.navigate(uri)
  10. }
  11. }
  12. }
  13. ...

我需要向将要打开的片段传递一个布尔值,但是,我看到navigate没有将Bundle作为参数,并且唯一可用的Uri构造函数是.navigate(uri, NavOptions),所以看起来没有办法传递一个bundle。
问题是-如何传递一个布尔值到片段?

UPD

我也试着这样做:

  1. ...
  2. fun navigate(uri: Uri, savedInstanceState: Bundle?) {
  3. with(supportFragmentManager.findFragmentById(R.id.nav_host_fragment) as NavHostFragment) {
  4. val authGraph: NavGraph = navController.navInflater.inflate(R.navigation.auth_nav_graph)
  5. maybeSetIapNavGraphs(navHostFragment.navController, authGraph)
  6. val bundle = Bundle().apply { putInt("isEnabled", 1) }
  7. navController.setGraph(authGraph, bundle)
  8. if (savedInstanceState == null) {
  9. navController.popBackStack()
  10. navController.navigate(uri)
  11. }
  12. }
  13. }
  14. ...

但是,当我尝试在片段中获取这个值时,如

  1. val arg1Value = requireArguments().getInt("isEnabled")

它给出0

jhkqcmku

jhkqcmku1#

是的,有可能。在xml配置中定义对额外参数的支持:

  1. <navigation xmlns:android="http://schemas.android.com/apk/res/android"
  2. xmlns:app="http://schemas.android.com/apk/res-auto"
  3. xmlns:tools="http://schemas.android.com/tools"
  4. android:id="@+id/mobile_navigation"
  5. app:startDestination="@+id/navigation_dashboard">
  6. <fragment
  7. android:id="@+id/navigation_home"
  8. android:name="ru.home.government.screens.deputies.DeputiesFragment"
  9. android:label="@string/title_deputies"
  10. tools:layout="@layout/fragment_deputies">
  11. <argument
  12. android:name="EXTRA_NO_BOTTOM_VIEW"
  13. app:argType="boolean"
  14. android:defaultValue="false" />
  15. </fragment>
  16. ...

之后,应该可以在Bundle over nav控制器内传递数据。更多参考检查thisthis

展开查看全部

相关问题