Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/329.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在不同的片段中添加回按按钮?_Java_Android_Fragment - Fatal编程技术网

Java 如何在不同的片段中添加回按按钮?

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

我将BottomNavigationView与3个主要片段一起使用,如
片段[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();
}
我刚刚实现了代码,并让您知道您必须知道的内容。
祝你好运。

可能的副本