android-fragments 如何在Android中使用嵌套片段时处理后退按钮

kzmpq1sx  于 2022-11-14  发布在  Android
关注(0)|答案(1)|浏览(168)

我有一个包含多个按钮的Home片段,当我单击Contact按钮时,另一个片段被打开。在这个片段中,我有两个子片段和两个按钮,我可以使用这些按钮在这些子片段之间切换。问题是当我按下Back按钮时,它会在子片段之间切换回来,然后才返回Home片段。但我想直接回到Home Fragment。

这是我打开子片段的方式

override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)
    val contactsListFragment = ContactsListFragment()
    val groupsListFragment = GroupsListFragment()

    activity?.title = getString(R.string.contacts_and_groups)
    openChildFragment(contactsListFragment)

    binding.contactsButton.setOnClickListener {
        openChildFragment(contactsListFragment)
    }

    binding.groupsButton.setOnClickListener {
        openChildFragment(groupsListFragment)
    }
}

private fun openChildFragment(fragment: Fragment) {
    val childFragmentManager = childFragmentManager
    val transaction: FragmentTransaction = childFragmentManager.beginTransaction()
    transaction.replace(binding.contactsGroupsFl.id, fragment)
    transaction.addToBackStack(null)
    transaction.commit()
}

如果有人能帮我解决这个问题就太好了。谢谢!

9o685dep

9o685dep1#

我认为你应该在两个片段中为back按钮添加一个侦听器,这样当它被按下时,你就可以清除所有backstack。

requireActivity().onBackPressedDispatcher.addCallback(
    viewLifecycleOwner,
    object : OnBackPressedCallback(true) {
        override fun handleOnBackPressed() {
            for (i: Int in 1..parentFragmentManager.backStackEntryCount) {
                parentFragmentManager.popBackStack()
            }
        }
    })

相关问题