从片段中删除片段

Removing a Fragment from a Fragment

我有一个 Activity 创建一个 Fragment 然后这个 Fragment 创建另一个 Fragment:

Activity -> 片段 1 -> 片段 2

我现在在 Fragment2,我想通过单击按钮返回 Fragment1

在我的 buttonOnClickListener 中,我有:

getActivity().getSupportFragmentManager().beginTransaction().remove(fragment2.this).commit();

这让我想到 Activity。真的有办法只删除 Fragment2 并转到 Fragment1 吗?

提前感谢您的宝贵时间,我在网上找不到任何合适的信息!

@AhmedAbidi 对您的问题有很好的洞察力,是的,正确实施 popBackStack 可能会解决您的问题。但无论如何,我想建议一种不同的方法来处理这种情况。

在你的 Activity 中写两个 public 函数来在你的片段之间切换。

public void switchToFragment1() {
    getSupportFragmentManager().beginTransaction()
        .replace(R.id.fragment_container, new Fragment1()).commit();
}

public void switchToFragment2() {
    getSupportFragmentManager().beginTransaction()
        .replace(R.id.fragment_container, new Fragment2()).commit();
}

现在点击 Fragment1 中的按钮,您可以通过

启动 Fragment2
((YourActivity) getActivity()).switchToFragment2();

切换到 Fragment1

时也是一样
((YourActivity) getActivity()).switchToFragment1();

为了清楚起见,您的问题需要更多代码。

Fragment1 是否通过 getSupportFragmentManager() 或 getChildFragmentManager() 添加 Fragment2?大概看起来你在做前者,如果是这样,你错误地使用了片段 API。根据 Android's Fragment Documentation

,片段不应该相互了解

Often you will want one Fragment to communicate with another, for example to change the content based on a user event. All Fragment-to-Fragment communication is done through the associated Activity. Two Fragments should never communicate directly.

因此,您应该实施适当的侦听器以从 Fragment1 到 Activity 进行通信,然后可以决定 where/when 添加 Fragment2 -- 然后正确利用 getSupportFragmentManager().addToBackStack() 的返回堆栈功能... getSupportFragmentManager().popBackStack()。有关详细说明,请参阅 Android Documentation on Back Navigation for Fragments