我有Activity
创建了Fragment
,然后此Fragment
创建了另一个Fragment
:
活动 - >片段1 - > Fragment2
我现在在Fragment2
,我想通过点击按钮返回Fragment1
。
在OnClickListener
我的button
我有:
getActivity().getSupportFragmentManager().beginTransaction().remove(fragment2.this).commit();
这将我带到Activity
。实际上有一种方法可以删除Fragment2
并转到Fragment1
吗?
提前感谢您的时间,我在网上找不到合适的信息!
答案 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。