Android 使用主细节片段的导航组件来回转换
设置 我有一个主细节片段设置,使用导航组件/带有转换的图形(从右侧滑入)。当它转到详细页时,它工作得很好,但当它返回到母版页时,我无法计算出来 期望值 我想要类似于Android 使用主细节片段的导航组件来回转换,android,kotlin,android-architecture-components,android-jetpack,android-architecture-navigation,Android,Kotlin,Android Architecture Components,Android Jetpack,Android Architecture Navigation,设置 我有一个主细节片段设置,使用导航组件/带有转换的图形(从右侧滑入)。当它转到详细页时,它工作得很好,但当它返回到母版页时,我无法计算出来 期望值 我想要类似于activity?.onBackPressed()的转换行为,即主片段从左侧滑入 现在,你可能会说我可以使用onBackPressed来代替,但我还有一个问题,那就是强迫我使用navController.navigateapi 原因:当按下保存按钮时,详细信息片段将一个捆绑传递回主机,但当我按下取消按钮时,该捆绑以某种方式持续存在,因
activity?.onBackPressed()
的转换行为,即主片段从左侧滑入
现在,你可能会说我可以使用onBackPressed
来代替,但我还有一个问题,那就是强迫我使用navController.navigate
api
原因:当按下保存按钮时,详细信息片段将一个捆绑
传递回主机,但当我按下取消
按钮时,该捆绑以某种方式持续存在,因此,我转而使用navController.navigate
,而不传递任何包
也许有不同的解决方案,任何横向思维都是值得赞赏的
okListener = View.OnClickListener {
navController.navigate(R.id.action_detail_to_master, bundleOf("user" to user)) // with bundle
}
cancelListener = View.OnClickListener {
navController.navigate(R.id.action_detail_to_master) // no bundle
}
观察结果
我使用导航组件观察到,似乎主片段从未被销毁,细节片段确实在背面被销毁,但主片段仍保留在内存中。如有任何见解,将不胜感激
okListener = View.OnClickListener {
navController.navigate(R.id.action_detail_to_master, bundleOf("user" to user)) // with bundle
}
cancelListener = View.OnClickListener {
navController.navigate(R.id.action_detail_to_master) // no bundle
}
nav_graph.xml(我尝试了反转进入/退出转换,但它有奇怪的转换行为)
问题
navController.navigate(R.id.action_detail_to_master, bundleOf("user" to user))
无法在Master中读取它
override fun onStart() {
super.onStart()
Log.d("UserList", "onStart: ")
arguments?.getParcelable<User>("user")?.let {
Log.d("Master", "onStart: data was passed back")
//recyclerView.adapter?.notifyDataSetChanged()
}
}
override-fun-onStart(){
super.onStart()
Log.d(“UserList”,“onStart:”)
参数?.getParcelable(“用户”)?.let{
Log.d(“主控”,“启动:数据被传回”)
//recyclerView.adapter?.notifyDataSetChanged()
}
}
override fun onStart() {
super.onStart()
Log.d("UserList", "onStart: ")
arguments?.getParcelable<User>("user")?.let {
Log.d("Master", "onStart: data was passed back")
//recyclerView.adapter?.notifyDataSetChanged()
}
}