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()
    }
}