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