为结果启动子导航图
start sub navigation graph for result
我正在为我目前正在开发的应用程序使用导航组件,我 运行 遇到了导航图和子导航图的问题。
基本上,我有 sub_nav_graph_1
和 sub_nav_graph_2
,每个都执行一个简单的流程,然后一直弹出回到启动它的片段,问题是当我需要创建一个流程时就像下面这样,当我在 sub_nav_graph_1
中的第 2 个片段时,我想开始 sub_nav_graph_2
的流程一直到最后但是当它结束时我想知道它是否成功结束(我想在 sub_nav_graph_1
的“片段编号 2”中获取那条信息)但是没有办法使用导航组件,我一直在寻找类似“结果的启动子导航图”之类的东西,而不管是谁启动该导航图,它总是在完成流程和 returns 结果后返回到它。
好的,所以我找到了问题的答案,Android支持在片段之间或片段与活动之间传递数据,这类似于 startActivityForResult 逻辑。
这是导航组件的示例。您可以在此处阅读更多相关信息
build.gradle
实现“androidx.fragment:fragment-ktx:1.3.0”
FragmentA.kt
class 片段A:片段(){
//不要忘记注销你的监听器
override fun onPause() {
super.onPause()
clearFragmentResultListener(FlagCustomerConfirmationFragment.REQUEST_KEY)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
// Step 1. Listen for fragment results
setFragmentResultListener(FragmentB.REQUEST_KEY) { key, bundle ->
// read from the bundle
}
// Step 2. Navigate to Fragment B
findNavController().navigate(R.id.fragmentB)
}
}
FragmentB.kt
class 片段 B : 片段() {
companion object {
val REQUEST_KEY = "FragmentB_REQUEST_KEY"
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
buttonA.setOnClickListener { view ->
// Step 3. Set a result
setFragmentResult(REQUEST_KEY, bundleOf("data" to "button clicked"))
// Step 4. Go back to Fragment A
implement logic which basically navigating up back to the fragment where you set up the listener
}
}
}
我正在为我目前正在开发的应用程序使用导航组件,我 运行 遇到了导航图和子导航图的问题。
基本上,我有 sub_nav_graph_1
和 sub_nav_graph_2
,每个都执行一个简单的流程,然后一直弹出回到启动它的片段,问题是当我需要创建一个流程时就像下面这样,当我在 sub_nav_graph_1
中的第 2 个片段时,我想开始 sub_nav_graph_2
的流程一直到最后但是当它结束时我想知道它是否成功结束(我想在 sub_nav_graph_1
的“片段编号 2”中获取那条信息)但是没有办法使用导航组件,我一直在寻找类似“结果的启动子导航图”之类的东西,而不管是谁启动该导航图,它总是在完成流程和 returns 结果后返回到它。
好的,所以我找到了问题的答案,Android支持在片段之间或片段与活动之间传递数据,这类似于 startActivityForResult 逻辑。
这是导航组件的示例。您可以在此处阅读更多相关信息
build.gradle
实现“androidx.fragment:fragment-ktx:1.3.0”
FragmentA.kt
class 片段A:片段(){
//不要忘记注销你的监听器
override fun onPause() {
super.onPause()
clearFragmentResultListener(FlagCustomerConfirmationFragment.REQUEST_KEY)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
// Step 1. Listen for fragment results
setFragmentResultListener(FragmentB.REQUEST_KEY) { key, bundle ->
// read from the bundle
}
// Step 2. Navigate to Fragment B
findNavController().navigate(R.id.fragmentB)
}
} FragmentB.kt
class 片段 B : 片段() {
companion object {
val REQUEST_KEY = "FragmentB_REQUEST_KEY"
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
buttonA.setOnClickListener { view ->
// Step 3. Set a result
setFragmentResult(REQUEST_KEY, bundleOf("data" to "button clicked"))
// Step 4. Go back to Fragment A
implement logic which basically navigating up back to the fragment where you set up the listener
}
}
}