【发布时间】:2019-10-06 21:34:34
【问题描述】:
假设我们有一个这样的项目:
class MainActivity : AppCompatActivity() {
private lateinit var drawerLayout: DrawerLayout
private lateinit var appBarConfiguration : AppBarConfiguration
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val binding = DataBindingUtil.setContentView<ActivityMainBinding>(this, R.layout.activity_main)
drawerLayout = binding.drawerLayout
val navController = this.findNavController(R.id.myNavHostFragment)
NavigationUI.setupActionBarWithNavController(this, navController, drawerLayout)
appBarConfiguration = AppBarConfiguration(navController.graph, drawerLayout)
// prevent nav gesture if not on start destination
navController.addOnDestinationChangedListener { nc: NavController, nd: NavDestination, bundle: Bundle? ->
if (nd.id == nc.graph.startDestination) {
drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_UNLOCKED)
} else {
drawerLayout.setDrawerLockMode(DrawerLayout.LOCK_MODE_LOCKED_CLOSED)
}
}
NavigationUI.setupWithNavController(binding.navView, navController)
}
我的 navGraph 文件包含片段和一个 Activity,如果用户从导航抽屉中选择它的标题,我想去的地方。我想向这个 Activity 发送一些数据。如何使用安全参数来做到这一点?
我正在使用:
apply plugin: "androidx.navigation.safeargs"
和
implementation 'androidx.navigation:navigation-fragment:2.0.0'
implementation 'androidx.navigation:navigation-ui:2.0.0'
【问题讨论】:
-
您可能需要重新考虑您的逻辑,因为使用菜单仅指定用于导航的 id 而不是操作;用于 SafeArgs。因此,要么您以普通包的形式传递数据并使用安全参数检索,要么重新考虑您的结构。
-
“菜单仅指定导航的 id 而不是操作” - 不正确。如果 id 引用了一个动作,那么这个动作实际上会被使用。
标签: navigation-drawer android-jetpack android-jetpack-navigation android-safe-args