android - onBackPressed()不适合我

时间:2013-05-22 12:28:18

标签: android

我有一个程序。第一个活动是启动画面,第二个是登录,第三个是列表视图菜单活动,然后是其他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();
}

6 个答案:

答案 0 :(得分:8)

我建议你按照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;
}

按下后退按钮按下当前活动当你按下时清除活动堆栈并将naviagate清除到MainActivity。

此外,我建议不按下后退按钮显示警告对话框。这是一个糟糕的设计。你可以搜索SO。我读了相同的内容并通过commonsware回答

答案 1 :(得分: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");
}

答案 2 :(得分:1)

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

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
        // write your code here
    }
    return true;
}

答案 3 :(得分:0)

去除饰面();每次startActivity()之后;将允许正确的导航而不必调用finish();执行方法onDestroy()。感谢你 。无需覆盖onBackPressed函数。仅在不再需要您的活动时才使用finish()并应关闭。

答案 4 :(得分:0)

如果您使用的是onBackPressed,请尝试使用此方法代替android.support.v7.app.ActionBar

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

        return super.onSupportNavigateUp();
    }

答案 5 :(得分:0)

onBackKeypress() 和显示对话框的解决方案。 如果您使用任何方法,如 onkeyDown 或 onKeyUp ,请检查未使用返回键。如果使用而不是覆盖该键或简单地从那里删除。