我有一个使用片段的应用程序。在应用程序启动时,我这样做:
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();
它再次关闭片段并进入空白活动时(好像它只是跟在后台)(这就是活动btw!)
我想知道你是否可以帮助我。通常应用程序不应该关闭自己,但我真的很感激这里的解决方法。或者我是在做背板上的错误吗?是否会自动添加它?
提前致谢< 3
答案 0 :(得分:0)
好的CommonsWare(感谢你!)指出,还有一些其他因素干扰了应用程序的运行。它的结构如下:
App Launch - > 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 Activities的onBackPressed()方法中我添加了这个:
CreamyActivity.this.finish();
Intent kill = new Intent();
kill.setAction(Util.BACKSTACK_INTENT);
this.sendBroadcast(kill);
每次用户想要离开应用程序时都会像这样,它会将一个意图发送回LaunchActivity并终止那个。
再次。非常感谢CommonsWare指出了之前设计中的缺陷:P希望这有助于某人。