从片段中删除片段

时间:2016-12-13 17:39:00

标签: android android-fragments android-fragmentactivity

我有Activity创建了Fragment,然后此Fragment创建了另一个Fragment

活动 - >片段1 - > Fragment2

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

OnClickListener我的button我有:

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

这将我带到Activity。实际上有一种方法可以删除Fragment2并转到Fragment1吗?

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

2 个答案:

答案 0 :(得分:3)

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

Activity中编写两个公共函数,以便在片段之间切换。

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 via,

((YourActivity) getActivity()).switchToFragment2();

切换到Fragment1

时也是如此
((YourActivity) getActivity()).switchToFragment1();

答案 1 :(得分:0)

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

Fragment1是通过getSupportFragmentManager()还是getChildFragmentManager()添加Fragment2的?可能看起来你正在做前者,如果是这样,你就错误地使用了Fragment API。根据{{​​3}}:

,片段不应该彼此了解
  

通常,您会希望一个片段与另一个片段进行通信,例如根据用户事件更改内容。所有Fragment-to-Fragment通信都是通过相关的Activity完成的。两个碎片永远不应该直接沟通。

因此,您应该实现适当的侦听器以从Fragment1传递到Activity,然后可以决定何时/何时添加Fragment2 - 然后正确使用getSupportFragmentManager().addToBackStack()的后向堆栈功能...与{{1} }。有关详细说明,请参阅Android's Fragment Documentation