【问题标题】:How to add back pressed button in diffeent fragment?如何在不同的片段中添加后按按钮?
【发布时间】:2019-11-06 15:42:44
【问题描述】:
我使用带有 3 个主要 Fragment 的 BottomNavigationView,例如 Fragment [A], [B], [C]。
而Fragment [A] 是默认片段,如果Fragment [B] 或[C] 按back button 必须返回Fragment A。在fragment [B] 中,我添加按钮以获取另一个片段,只需调用它Fragment [D],但如果在片段D 中我按下返回按钮应用程序返回fragment [A]。
那么当fragment [D]按下返回按钮时如何返回Fragment [B]?
【问题讨论】:
标签:
java
android
fragment
【解决方案1】:
您可以使用片段堆栈。在活动中实现 onBackPressed()。
@Override
public void onBackPressed() {
//Work with fragments stack...
int count = getSupportFragmentManager().getBackStackEntryCount();
if (count == 0) {
super.onBackPressed();
} else {
getSupportFragmentManager().popBackStack();
}
}
【解决方案2】:
Fragment 没有 onBackPressed 函数。
这就是为什么你应该为 backPressed 事件定义回调接口。
public interface IFragment {
boolean onBackPressed();
}
然后,您应该实现您的片段 [A]、[B]、[C]、[D]。
@Override
public boolean onBackPressed() {
return true;
}
您应该在 Fragments 的宿主活动中处理它。
@Override
public void onBackPressed() {
List<Fragment> fragments = getSupportFragmentManager().getFragments();
boolean handled = false;
for(Fragment f : fragments) {
if(f instanceof IFragment) {
handled = ((IFragment) f).onBackPressed();
if(handled) {
FragmentManager fm = getSupportFragmentManager();
for(String name : fragmentNames) {
fm.popBackStack(name, 0);
}
fm.beginTransaction().commit();
}
}
}
super.onBackPressed();
}
我刚刚实现了代码,让你知道你必须知道什么。
祝你好运。