android - onBackPressed() 不适合我

新手上路,请多包涵

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

原文由 user2401745 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.1k
2 个回答

更新 - 2022 年 6 月 19 日

以下答案已过时。我们可以使用带工具栏的导航架构组件,以便为我们处理后退导航,或者您应该查看 https://developer.android.com/guide/navigation/navigation-custom-back

对于导航架构组件检查

https://developer.android.com/guide/navigation/navigation-getting-started

导航组件也可用于组合 https://developer.android.com/jetpack/compose/navigation

旧答案- 过时

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

当您按下后退按钮时,您会在当前活动中按下后退按钮以清除活动堆栈并导航至 MainActivity。

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

原文由 Raghunandan 发布,翻译遵循 CC BY-SA 4.0 许可协议

@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");
}

原文由 Keshav Gera 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏