从片段中删除片段
Removing a Fragment from a Fragment
我有一个 Activity
创建一个 Fragment
然后这个 Fragment
创建另一个 Fragment
:
Activity -> 片段 1 -> 片段 2
我现在在 Fragment2
,我想通过单击按钮返回 Fragment1
。
在我的 button
的 OnClickListener
中,我有:
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。
我有一个 Activity
创建一个 Fragment
然后这个 Fragment
创建另一个 Fragment
:
Activity -> 片段 1 -> 片段 2
我现在在 Fragment2
,我想通过单击按钮返回 Fragment1
。
在我的 button
的 OnClickListener
中,我有:
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。