Android 让onBackPressed()关闭应用程序

Android 让onBackPressed()关闭应用程序,android,android-fragments,back-stack,Android,Android Fragments,Back Stack,我有一个使用片段的应用程序。在应用程序发布时,我会这样做: FragmentManager man = getFragmentManager(); FragmentTransaction trans = man.beginTransaction(); trans.replace(R.id.master_container, master); trans.commit(); 如您所见,我没有将其添加到backbackback中,因为我不希望用户被捕获到没有片段的空

我有一个使用片段的应用程序。在应用程序发布时,我会这样做:

    FragmentManager man = getFragmentManager();
    FragmentTransaction trans = man.beginTransaction();
    trans.replace(R.id.master_container, master);
    trans.commit();

如您所见,我没有将其添加到backbackback中,因为我不希望用户被捕获到没有片段的空活动中。然而,这不起作用。因为当我在
master
屏幕中按下backbutton时,它将关闭片段并将我留在黑色活动中。 现在我重写
onBackPressed()
方法来帮助我:

@Override
public void onBackPressed() {

    // 'master' is the Mainscreen Fragment
    if (master.isVisible()) {

        if (!second) {
            Toast.makeText(getApplication(), "Press back again to close application", Toast.LENGTH_SHORT).show();
            second = true;
        } else {
            second = false;
            CreamyActivity.this.finish();
        }

    } else {
        super.onBackPressed();
        bar.show();
    }
}
但无论何时
CreamyActivity.this.finish()它再次关闭片段并进入空白活动(好像它正跟随后台堆栈)(这都在活动BTW中)

我想知道你是否能帮我。通常应用程序不应该自行关闭,但我真的很想在这里找到解决办法。还是我背靠背有问题?它会自动添加它吗

提前感谢好的,因为Commonware(谢谢你!)指出还有其他东西干扰了应用程序的工作。它的结构如下:

应用程序启动-->启动活动如果(API>14)-->奶油活动

else-->CrunchyActivity

在CreamyActivity中调用finish()时,它使应用程序返回到LaunchActivity,它的onCreate()中除了if-else语句之外没有其他内容。现在我已经做到了:

在我的启动活动中,我添加了:

    private IntentFilter filter;

    filter = new IntentFilter(Util.BACKSTACK_INTENT);

    registerReceiver(new BroadcastReceiver() {

        @Override
        public void onReceive(Context context, Intent intent) {
            LaunchActivity.this.finish();
            unregisterReceiver(this);

        }
    }, filter);
在onBackPressed()方法中,我从奶油/松脆的活动中添加了以下内容:

            CreamyActivity.this.finish();
            Intent kill = new Intent();
            kill.setAction(Util.BACKSTACK_INTENT);
            this.sendBroadcast(kill);
这样,每当用户想要退出应用程序时,它都会将意图发送回LaunchActivity并终止该意图


再说一遍。非常感谢Commonware指出了以前设计中的缺陷:P希望这对某人有所帮助。

称之为
CreamyActivity.this.finish()
after
super.onBackPressed()嗯,诺普。无济于事:(它在后退之后,移除一个项目,然后就卡在那里了。有趣的是,
奶油活动。这个.finish();
必须关闭片段,因为下面的另一个
super.onBackPressed();
从未被调用“但是,这不起作用。因为当我在主屏幕上按下backbutton时,它将关闭片段并将我保留在黑色活动中”--如果您在后堆栈上没有片段事务,则后退按钮将
finish()
您的活动,您可以通过运行任意数量的示例应用程序看到这一点,例如:(请参见
OtherActivity
)。应用程序中的其他内容正在干扰此行为。我猜BACK实际上正在退出您的活动,但会将控制权返回到您忘记的其他活动。:)嗯,不过很有趣。到目前为止,我的应用程序中还有一个活动。当应用程序启动时,会快速检查API级别是否大于4.0。“CreamyActivity”实际上只会在用户吃了冰淇淋三明治时启动(badum tss真的很糟糕的笑话xD)。那么,它可能又回到了这一点?如果是这样,最优雅的方式是在
finish();
正在调用
CreamyActivity
以触发初始启动活动同时关闭时向第二个活动发送意图吗?还是有更好的方式?谢谢您的输入,顺便说一句:)