我有一个申请,我有5个活动。一个菜单活动和另外4个子活动附加到菜单屏幕。所以我可以选择任何活动然后再回到菜单。假设我像这样移动
菜单 - >活动1 - >菜单 - >活动3 - >活动2 - >菜单
现在我按下Home / Back按钮,我希望我的应用程序会显示一个退出确认的警告对话框,如果我按是然后杀死所有活动并显示主屏幕。
我已经尝试过那些finish(),System.exit(0),但没有运气。 finish()和System.exit(0)都完成当前活动而不是所有活动。 请给我指路。
答案 0 :(得分:0)
我认为在后台停止儿童活动会更好。例如
Menu > Activity1 >
现在,如果您再次转到menu
,请完成Acitivy 1
。
再次Menu > Activity 3 > Activity 2 > Menu
当您转到活动3然后转到活动2 ..然后通过使用结果的开始活动从3开始活动2。因此,如果你想从活动2进入菜单,那么你可以通过活动3 ..
使用CLEAR_TOP
,SINGLE_TASKS
标志打开菜单的另一个更好的解决方案。因此,当您进入菜单时,只有菜单活动处于活动状态。然后通过调用完成,您可以完成您的申请。
答案 1 :(得分:0)
这对我有用:
Intent intent = new Intent(this, TopMenuActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.putExtra(Utils.INTENT_EXIT, true);
startActivity(intent);
finish(); // finish the current activity
然后在TopMenuActivity onCreate()方法中添加以下内容
if( getIntent().getBooleanExtra(Utils.INTENT_EXIT, false)){
finish(); // finish TopMenu and go HOME
return; // prevent from doing unnecessary stuff below
}
很脏,是的!但它确实有效。
答案 2 :(得分:0)
是的,你可以。有2个不同的aproches
使用onActivityResult
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// Check which request we're responding to
if (resultCode == QUIT_ALL) {
//
setResult(QUIT_ALL,returnIntent);
finish();
}
}
//last activity
setResult(QUIT_ALL,returnIntent);
finish();
明确声明活动跳过堆栈:
< activity android:name=".Activity1" android:noHistory="true" ... />
< activity android:name=".Activity2" android:noHistory="true" ... />
答案 3 :(得分:0)
完成活动,当主页按钮单击时。在您的活动中输入此代码。它的工作对我来说很完美..
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if ((keyCode == KeyEvent.KEYCODE_HOME)) {
Log.v("hari", "KEYCODE_HOME");
onUserLeaveHint();
return true;
}
if ((keyCode == KeyEvent.KEYCODE_BACK)) {
return true;
}
if ((keyCode == KeyEvent.KEYCODE_MENU)) {
return true;
}
return false;
}
public void onUserLeaveHint() { // this only executes when Home is selected.
super.onUserLeaveHint();
if (!isFinishing()) {
Log.v("hari", "if condition working");
finish();
}
}
但使用此代码时有时后退按钮无效...