我有两个片段:FragmentA
和FragmentB
。我从FragmentA
开始ActivityMain
,然后开始FragmentB
而不从后退栈弹出FragmentA
(我想在{{1 }})。最终,我完成了FragmentA
的操作并将其从堆栈中弹出,但是我需要通知Fragment A FragmentB
不再使用。
我如何与FragmentB
交流,FragmentB
已关闭,而FragmentA
现在已成为后退堆栈的顶部?
我曾尝试在Fragment的许多类中设置断点,例如OnResume(),OnAttach,OnStart(),但没有遇到任何问题。
答案 0 :(得分:1)
您应该使用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
时,将调用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()
}
}