【问题标题】:android - onBackPressed() not working for meandroid - onBackPressed() 对我不起作用
【发布时间】:2013-05-22 12:28:17
【问题描述】:

我有一个程序。第一个活动是启动屏幕,第二个是登录,第三个是列表视图菜单活动,然后是其他 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 1/2 行文字,我找不到任何点。把你的语法提高到可读状态怎么样?!
  • 如何在开始时添加点和逗号。不知何故你可以处理语法:)
  • 问题不清楚。正如@blackbelt 所问,请编辑您的问题并描述您的问题
  • @user2401745 如果您仍然可以清理问题,那就太好了。用词块造一些句子

标签: android


【解决方案1】:

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

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

这是一个相同的教程

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

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

@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 的回答

【讨论】:

  • 等一下。您在谈论“关闭”对话框是一个糟糕的设计,但同时您建议打开一个新的活动?你在跟我开玩笑吗?这甚至比询问我是否意外点击后退按钮的对话框更糟糕......后退按钮至少应该让我返回,而不是进入新创建的活动!
  • @WarrenFaith 我同意你的说法。我知道默认情况下它应该这样工作。但由于 OP 要求相同,所以我发布了它。
  • 仍然是您可以创建的最糟糕的 UX 体验之一。因此,我将保留反对票。
  • 事实上,这就是所谓的“导航”结构出现并告诉你:“嘿,你可以使用返回按钮,但如果你想回家,只需按下我的操作栏中的图标,你就回家了”。即使是新的 SlideMenu 也是一个很好的 UX 解决方案。是的:我希望它可以返回 40 个屏幕,因为这就是后退按钮存在的原因。您是否希望浏览器中的后退按钮将您带到起始页面? “用户想退一步”或“他想一路退”之间的区别在哪里?我希望我说清楚了...
  • @WarrenFaith 很清楚。我只是想要一些澄清,仅此而已。我正在编辑我的答案
【解决方案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");
}

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

      • 它比必须为每个导航活动编写 onPressedBack 方法更好,更不用说所有警报对话框了。只是说。
      • 只需在您不希望用户返回的所有活动中使用完成,例如登录
      【解决方案5】:

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

          @Override
          public boolean onSupportNavigateUp() {
              // do your stuff
      
              return super.onSupportNavigateUp();
          }
      

      【讨论】:

        【解决方案6】:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-04-03
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-09-11
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多