首页 > 解决方案 > 从 Fragment1 调用 Fragment2 获取结果

问题描述

我有一个基本 Activity,其中有 2 个片段(比如说 Fragment1 和 Fragment2)我需要从 Fragment1 调用 Fragment2 来捕获数据,然后在 Fragment1 中使用相同的片段。

我知道 Activity 对结果的调用可以在 baseActivity 的 onActivityResult 中获取,但是我将如何从 Fragment1 调用 Fragment2 以达到结果目的?

标签: androidandroid-fragmentsfragmentonactivityresult

解决方案


没有 MVVM

我猜最简单的内置方式是使用Fragment.setTargetFragment(@Nullable Fragment fragment, int requestCode)

从片段1:

val fragment = Fragment2.newInstane()
fragment.setTargetFragment(this, 10)

当您想将结果返回到片段 1 时,从片段 2 开始:

fun setResultBack(){
    val intent = Intent()
    // inject anything to intent here
    getTargetFragment().onActivityResult(10, Activity.RESULT_OK, intent)
    fragmentManager.popBackStack()
}

onActivityResult最后从片段 1覆盖:

override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    if(requestCode == 10){
        // handle result here
    } 
    else super.onActivityResult(requestCode, resultCode, data)
}

即使在恢复片段状态或配置更改之后,这在所有情况下都有效。

使用 MVVM

使用文档中推荐的共享视图模型


推荐阅读