0

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

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

如您所见,我没有将其添加到 Backstack 中,因为我不希望用户陷入没有片段的空活动中。然而,这是行不通的。因为当我按下master屏幕上的后退按钮时,它会关闭片段并使我处于黑色活动状态。现在我重写了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();它再次关闭片段并进入空白活动时(就好像它只是跟随后台堆栈)(这都是在活动中顺便说一句!)

我想知道你是否可以帮助我。通常应用程序不应该自行关闭,但我非常感谢这里的解决方法。还是我在后台做错了什么?它会自动添加它吗?

提前感谢<3

4

1 回答 1

0

好的,正如 CommonsWare(感谢您!)指出的那样,还有其他东西干扰了应用程序的工作。它的结构是这样的:

应用启动 --> LaunchActivity if(API > 14) --> CreamyActivty

否则-> CrunchyActivity

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

在我的 LaunchActivity 中,我添加了:

    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);

在 Creamy/Crunchy 活动的 onBackPressed() 方法中,我添加了以下内容:

            CreamyActivity.this.finish();
            Intent kill = new Intent();
            kill.setAction(Util.BACKSTACK_INTENT);
            this.sendBroadcast(kill);

就像这样,每次用户想要退出应用程序时,它都会向 LaunchActivity 发送一个意图并终止该意图。

再次。非常感谢 CommonsWare 指出先前设计中的缺陷:P 希望这对某人有所帮助。

于 2013-04-13T11:27:35.463 回答