Java 如何在不同的片段中添加回按按钮?
我将BottomNavigationView与3个主要片段一起使用,如Java 如何在不同的片段中添加回按按钮?,java,android,fragment,Java,Android,Fragment,我将BottomNavigationView与3个主要片段一起使用,如片段[A]、[B]、[C]。 而片段[A]是默认片段,如果片段[B]或[C]按下后退按钮必须返回到片段A。在fragment[B]中,我添加按钮以获取另一个片段,只需将其称为fragment[D],但如果在fragment D中,我按下后退按钮,返回到fragment[A] 那么,当按下“后退”按钮时,如何返回到片段[B]。您可以使用片段堆栈。在活动中实现onBackPressed() @Override public voi
片段[A]、[B]、[C]
。
而片段[A]
是默认片段,如果片段[B]
或[C]
按下后退按钮
必须返回到片段A
。在fragment[B]
中,我添加按钮以获取另一个片段,只需将其称为fragment[D]
,但如果在fragment D中,我按下后退按钮,返回到fragment[A]
那么,当按下“后退”按钮时,如何返回到
片段[B]
。您可以使用片段堆栈。在活动中实现onBackPressed()
@Override
public void onBackPressed() {
//Work with fragments stack...
int count = getSupportFragmentManager().getBackStackEntryCount();
if (count == 0) {
super.onBackPressed();
} else {
getSupportFragmentManager().popBackStack();
}
}
片段中没有onBackPressed函数。
这就是为什么您应该为backPressed事件定义回调接口
public interface IFragment {
boolean onBackPressed();
}
然后,您应该实现您的片段[A]、[B]、[C]、[D]
@Override
public boolean onBackPressed() {
return true;
}
你应该在你的主机碎片活动中处理它
@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();
}
@覆盖
public void onBackPressed(){
List fragments=getSupportFragmentManager().getFragments();
布尔值=假;
for(片段f:片段){
if(if片段的f实例){
handled=((iffragment)f).onBackPressed();
如果(已处理){
FragmentManager fm=getSupportFragmentManager();
for(字符串名称:碎片名称){
fm.popbackbackstack(名称,0);
}
fm.beginTransaction().commit();
}
}
}
super.onBackPressed();
}
我刚刚实现了代码,并让您知道您必须知道的内容。祝你好运。可能的副本