我正在尝试使用导航控制器。我有一个底部导航视图。位于我的MainActivity上,并使用以下代码启动:
class MainActivity : AppCompatActivity() {
lateinit var navController : NavController
lateinit var logoHeaderImageView : ImageView
var toolbarMenu : Menu? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
logoHeaderImageView = findViewById(R.id.header_lakuin_image_view)
navController = Navigation.findNavController(this,R.id.nav_main_host_fragment)
setupBottomNavMenu(navController)
setupActionBar(navController)
}
fun setupBottomNavMenu(navController: NavController) {
NavigationUI.setupWithNavController(bottom_navigation_view,navController)
}
fun setupActionBar(navController: NavController) {
setSupportActionBar(main_activity_toolbar)
main_activity_toolbar.title = ""
val appBarConfiguration = AppBarConfiguration(
setOf(
// set some destination as the top hierarchy destination, to make the up button doesn't show.
R.id.destination_home,
R.id.destination_order,
R.id.destination_favourite,
R.id.destination_cart,
R.id.destination_profile
))
NavigationUI.setupWithNavController(main_activity_toolbar,navController,appBarConfiguration)
}
override fun onCreateOptionsMenu(menu: Menu?): Boolean {
menuInflater.inflate(R.menu.menu_main_toolbar, menu)
toolbarMenu = menu
return true
}
override fun onOptionsItemSelected(item: MenuItem): Boolean {
return item.onNavDestinationSelected(navController) || super.onOptionsItemSelected(item)
}
}
所以我想将数据从HomeFragment
(目的地家庭)传递到OderFragment
(目的地顺序)。我通常使用bundle或safeArgs传递数据,例如以下代码:
var bundle = bundleOf("amount" to amount)
view.findNavController().navigate(R.id.confirmationAction, bundle)
但我不知道在哪里放置的代码,如果我想从我的数据传递HomeFragment
到OderFragment
使用时NavigationUI.setupWithNavController(bottom_navigation_view,navController)
(或使用navigation-ui-ktx
Kotlin扩展名bottom_navigation_view.setupWithNavController(navController)
),您不能将任何自定义参数传递给目的地-全局导航的重要部分在于,它们始终会将您带到处于相同状态的同一屏幕。
通常,您应该将诸如当前数量之类的数据与导航参数分开保存-无论是保存在持久数据库中,还是SharedPreferences或其他在进程死机后仍可保存的位置,即使重新启动用户,用户也可以继续执行其操作电话等
但是,如果必须为此使用“导航”参数,则可以提前(即,金额发生变化时)为目的地设置默认参数:
NavDestination orderDestination = navController.graph.findNode(R.id.destination_order)
orderDestination.addArgument("amount", NavArgument.Builder()
.setType(NavType.FloatType)
.setDefaultValue(amount)
.build())
之后,默认情况下,BottomNavigationView
触发R.id.destination_order
将自动包括该参数以及新amount
值。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句