为结果启动子导航图

start sub navigation graph for result

我正在为我目前正在开发的应用程序使用导航组件,我 运行 遇到了导航图和子导航图的问题。

基本上,我有 sub_nav_graph_1sub_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
    }
}

}