9

我有一个程序。第一个活动是启动屏幕,第二个是登录,第三个是列表视图菜单活动,然后是其他 2 个活动。启动画面在 3 秒后消失,如果选中了“记住我的登录”复选框,则直接进入菜单页面。
我覆盖了onBackPressed菜单活动中的功能,以便在用户从菜单中单击返回后直接退出程序。但是,如果我完成了其他活动,它不会退出;它转到堆栈中的上一个活动并且对话框没有弹出,尽管它实际上确实出现了一秒钟并立即消失。

这是我的 onBackPressed功能

public void onBackPressed() {
    // super.onBackPressed();
    AlertDialog.Builder builder = new AlertDialog.Builder(this);
    builder.setMessage("Are you Sure want to close the Application..?")
        .setCancelable(false)
        .setTitle("EXIT")
        .setNegativeButton("No", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int id) {
                dialog.cancel();
            }
        })
        .setPositiveButton("Yes", new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int id) {
                finish();
            }
        });
    AlertDialog alert = builder.create();
    alert.show();
    //super.onBackPressed();
}
4

6 回答 6

10

我建议您按照 WarrenFaith 在下面的评论中的建议使用 ActionBar。请检查下面的链接以获取更多信息

http://developer.android.com/design/patterns/navigation.html

这是相同的教程

http://www.vogella.com/articles/AndroidActionBar/article.html

你可以使用这个。然而,这似乎也是一个糟糕的设计。您可以查看下面的评论以了解原因

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
        onBackPressed();
    }
    return super.onKeyDown(keyCode, event);
}

public void onBackPressed() {
    Intent myIntent = new Intent(MyActivity.this, MainActivity.class);

    myIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
    startActivity(myIntent);
    finish();
    return;
}

Onn 后退按钮在您按下当前活动时按下您的当前活动,您清除活动堆栈并导航到 MainActivity。

我也建议不要在按下后退按钮时显示警报对话框。这是一个糟糕的设计。你可以搜索SO。我读了同样的书,并得到了 commonsware 的回答

于 2013-05-22T13:03:19.560 回答
2
@Override
public void onBackPressed() {
    super.onBackPressed();
    int count = getSupportFragmentManager().getBackStackEntryCount();
    Log.e("count", "is getBackStackEntryCount -> " + count);
    for (int i = 0; i < count; ++i) {
        getSupportFragmentManager().popBackStackImmediate();
        Log.e("getBackStack", "IS REMOVED " + i);
    }
    // toolbar.setTitle("Dashboard");
}
于 2017-06-21T06:37:05.750 回答
1

您可以像这样覆盖后退按钮

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
        // write your code here
    }
    return true;
}
于 2014-07-22T07:11:47.827 回答
0

移除finish(); 在每个 startActivity(); 将允许正确导航,而不必调用finish();执行 onDestroy() 方法。感谢你 。无需重写 onBackPressed 函数。仅当您的活动不再需要并且应该关闭时才使用 finish() 。

于 2017-09-13T12:06:28.063 回答
0

试试这个,而不是onBackPressed如果你正在使用android.support.v7.app.ActionBar

    @Override
    public boolean onSupportNavigateUp() {
        // do your stuff

        return super.onSupportNavigateUp();
    }
于 2020-07-23T09:06:50.477 回答
0

onBackKeypress() 的解决方案并显示对话框。如果您使用任何方法,如 onkeyDown 或 onKeyUp ,请检查 Back key is not used in that。如果使用而不是覆盖该键或简单地从那里删除。

于 2021-05-24T09:12:59.030 回答