android - 当它成为 backstack 的顶部时与 Fragment 通信?
问题描述
我有两个片段:FragmentA
和FragmentB
. 我FragmentA
从我的开始ActivityMain
,然后我开始FragmentB
而不FragmentA
从后台弹出(我想FragmentA
在 的背景中显示FragmentB
)。最终我完成FragmentB
并从后台弹出它,但我需要通知FragmentB
不再使用的片段 A。
我如何与FragmentA
那个FragmentB
已经关闭并且FragmentA
现在是后台堆栈的顶部进行通信?
我已经尝试在许多 Fragment 的类中放置断点,例如 OnResume()、OnAttach、OnStart(),但没有受到任何影响。
解决方案
您应该使用setTargetFragment方法。
此片段的可选目标。例如,如果此片段正在由另一个片段启动,并且完成后希望将结果返回给第一个片段,则可以使用此方法。此处设置的目标通过实例跨实例保留。
回到你的情况,FragmentB
从FragmentA
.
class FragmentA : Fragment() {
companion object {
val REQUEST_CODE_FRAGMENT_A = 1
}
override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View {
val view = inflater?.inflate(R.layout.fragment_a, container, false)!!
val fragmentB = FragmentB().apply {
setTargetFragment(this@FragmentA, REQUEST_CODE_FRAGMENT_A)
}
fragmentManager.beginTransaction()
.add(R.id.container, fragmentB, "fragB")
.addToBackStack(null)
.commit()
return view
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
if (requestCode == REQUEST_CODE_FRAGMENT_A) {
if (resultCode == Activity.RESULT_OK) {
val message = data?.getStringExtra("message")
Toast.makeText(activity, message, Toast.LENGTH_SHORT).show()
}
}
}
}
当FragmentB
从 backstack 中弹出时,onDestroy
方法将被调用。
class FragmentB : Fragment() {
override fun onDestroy() {
// Notify for FragmentA (as target fragment) that FragmentB destroyed.
val intent = Intent().apply { putExtra("message", "I'm out.") }
targetFragment.onActivityResult(targetRequestCode, Activity.RESULT_OK, intent)
super.onDestroy()
}
}
推荐阅读
- jquery - isotope : 过滤多个数据属性和seelect
- python - 如何从字典的元素信息中提取
- git - Sourcetree:将分支与新的子模块合并
- mysql - MySQL查询返回未定义-NodeJS
- stream - 在 Akka Streams 中使用 TTL 管理状态
- python - 错误:使用 heroku CLI 部署 Python 应用程序
- swift - 如何让我的 CustomView 返回 View 以及 SwiftUI 中的更多额外数据?
- c# - 将 Excel 单元格区域转换为 DataTable C#
- reactjs - 如何根据 axios.post reactjs 的响应显示 Material-ui Alert
- node.js - 当我使用firebase模拟器和next.js时如何使用firebase-admin获取firestore数据