【问题标题】:Communicating with fragment when it becomes the top of the backstack?当它成为 backstack 的顶部时与 Fragment 通信?
【发布时间】:2018-09-13 00:13:23
【问题描述】:

我有两个片段:FragmentAFragmentB。我从我的ActivityMain 开始FragmentA,然后我从FragmentB 开始而不从后台弹出FragmentA(我想在FragmentB 的背景中显示FragmentA)。最终我完成了 FragmentB 并将其从后台弹出,但我需要通知 Fragment A FragmentB 不再使用。

我如何与FragmentA 沟通FragmentB 已关闭并且FragmentA 现在是后台堆栈的顶部?

我尝试在许多 Fragment 的类中设置断点,例如 OnResume()、OnAttach、OnStart(),但没有任何结果。

【问题讨论】:

标签: android android-fragments fragmentmanager


【解决方案1】:

你应该使用setTargetFragment方法。

此片段的可选目标。这可以用于,例如,如果 这个片段正在由另一个片段开始,完成后想要给 结果回到了第一个。此处设置的目标保留在 实例通过。

回到你的情况,从FragmentA开始FragmentB

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()
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多