android - 从 Fragment1 调用 Fragment2 获取结果
问题描述
我有一个基本 Activity,其中有 2 个片段(比如说 Fragment1 和 Fragment2)我需要从 Fragment1 调用 Fragment2 来捕获数据,然后在 Fragment1 中使用相同的片段。
我知道 Activity 对结果的调用可以在 baseActivity 的 onActivityResult 中获取,但是我将如何从 Fragment1 调用 Fragment2 以达到结果目的?
解决方案
没有 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
推荐阅读
- c# - 是否可以基于聚合有条件地格式化 WPF 数据网格行?
- azure-ad-b2c - Azure B2C 页面自定义 - 使用超文本链接而不是 ClaimsProviderSelection 的按钮
- c++ - 使用非指针数据移动 ctor 和移动赋值运算符
- python - 计算熊猫数据框中子元素的出现次数
- python - networkx pagerank 的详细输出
- c# - 来自 Microsoft Graph 的多个用户的 Outlook 推送通知
- python - Pip 选择了错误的路径
- php - Laravel Nova 上的 belongsTo 验证错误,但字段在测试中具有价值
- performance - NumPy 中从 int16 到 [-1.0, 1.0] float32 范围的融合快速转换
- docker - 如何在生产中处理更新基于 docker-compose 的应用程序