gpt4 book ai didi

android - 如果我点击导航 Controller 中的菜单,如何在两个 fragment 目的地之间传递数据?

转载 作者:行者123 更新时间:2023-11-29 16:31:38 25 4
gpt4 key购买 nike

我正在尝试使用导航 Controller 。我有一个底部导航 View 。位于我的 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)
}




}

这是我的底部导航 View 的外观: enter image description here

所以我想将数据从我的 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 值。

关于android - 如果我点击导航 Controller 中的菜单,如何在两个 fragment 目的地之间传递数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54683464/

25 4 0