【问题标题】:How to handle back button in activity如何处理活动中的后退按钮
【发布时间】:2011-07-15 19:15:11
【问题描述】:

如何处理活动中的后退按钮?我有一些按钮。如果我单击其中一个按钮,它将重定向到我需要的按钮。它工作正常,但当我按下返回按钮时,它就完成了。

如何解决这个问题。对于所有这些按钮,我只有一项活动。 提前致谢。

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) 
{
    if ((keyCode == KeyEvent.KEYCODE_BACK)) 
    {
        return false; //I have tried here true also
    }
    return super.onKeyDown(keyCode, event);
}

我已经使用上面的代码来处理后退按钮,但它不起作用。当我按下后退按钮时,它会自行击中。

【问题讨论】:

    标签: android


    【解决方案1】:

    你可以这样处理:

    适用于 API 5 级及更高级别

    @Override
    public void onBackPressed() {
        // your code.
    }
    

    早于 API 5

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

    【讨论】:

    • 片段呢?
    • 是的,有谁知道如何从片段中做到这一点
    • @james-wierzba 处理活动并将处理委托给片段
    【解决方案2】:

    除了以上我个人推荐

    onKeyUp():
    

    编程语言 keydown会在用户最初按下按键时触发在用户按住按键时重复.*

    对于所有开发平台都是如此。

    Google 开发人员建议,如果您在视图中拦截 BACK 按钮,您应该在 keydown 上使用 starttracking 跟踪 KeyEvent,然后使用 keyup 调用。

    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK
                && event.getRepeatCount() == 0) {
            event.startTracking();
            return true;
        }
        return super.onKeyDown(keyCode, event);
    }
    
    public boolean onKeyUp(int keyCode, KeyEvent event) {
        if (keyCode == KeyEvent.KEYCODE_BACK && event.isTracking()
                && !event.isCanceled()) {
            // *** Your Code ***
            return true;
        }
        return super.onKeyUp(keyCode, event);
    }
    

    【讨论】:

      【解决方案3】:

      对于硬件设备返回按钮和软主页(返回)按钮,例如“

      @Override
      public boolean onOptionsItemSelected(MenuItem item) {
          switch (item.getItemId()) {
              case android.R.id.home:
                  //finish();
                  onBackPressed();
                  break;
          }
          return true;
      }
      
      
      
      @Override
      public void onBackPressed() {
         //Execute your code here
         finish();
      
      }
      

      干杯!

      【讨论】:

      • 我使用了finish,它并没有回到之前的活动。
      • "finish()" 仅关闭您当前的活动。您需要使用意图来处理返回到以前的活动。顺便说一句,如果您之前从它导航时没有“完成()”它,您之前的活动应该仍然是打开的。
      • 我正在测试一些东西并将更新您。感谢您的回复。
      • 只需使用 super.onBackPressed() 而不是 finish()
      【解决方案4】:

      一个更简单的方法是捕获后退按钮按下并调用 moveTaskToBack(true),如下所示:

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

      Android 2.0 引入了新的 onBackPressed 方法,以及these recommendations关于如何处理后退按钮

      【讨论】:

        【解决方案5】:

        你应该使用:

        @Override
        public boolean onKeyDown(int keyCode, KeyEvent event)  {
            if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.ECLAIR
                    && keyCode == KeyEvent.KEYCODE_BACK
                    && event.getRepeatCount() == 0) {
                // Take care of calling this method on earlier versions of
                // the platform where it doesn't exist.
                onBackPressed();
            }
        
            return super.onKeyDown(keyCode, event);
        }
        
        @Override
        public void onBackPressed() {
            // This will be called either automatically for you on 2.0
            // or later, or by the code above on earlier versions of the
            // platform.
            return;
        }
        

        这里定义:http://android-developers.blogspot.com/2009/12/back-and-other-hard-keys-three-stories.html

        如果您使用旧版本编译代码,请将 android.os.Build.VERSION_CODES.ECLAIR 替换为 5(例如,您可以添加一个名为 ECLAIR 的私有 int)

        【讨论】:

          【解决方案6】:

          这是一种简单的做事方式。

              @Override
                  public void onBackPressed() {
                      // do what you want to do when the "back" button is pressed.
                      startActivity(new Intent(Activity.this, MainActivity.class));
                      finish();
                  }
          

          我认为可能有更复杂的方法来处理它,但我喜欢简单。例如,我使用上面的模板让用户退出应用程序,然后返回到我选择的另一个活动。

          【讨论】:

            【解决方案7】:

            这对我有帮助..

            @Override
            public void onBackPressed() {
                startActivity(new Intent(currentActivity.this, LastActivity.class));
                finish();
            }
            

            或者????? 即使您也可以将其用于抽屉切换

            @Override
            public void onBackPressed() {
                DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
                if (drawer.isDrawerOpen(GravityCompat.START)) {
                    drawer.closeDrawer(GravityCompat.START);
                } else {
                    super.onBackPressed();
                }
                    startActivity(new Intent(currentActivity.this, LastActivity.class));
                finish();
            
            }
            

            我希望这会对你有所帮助.. :)

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2021-10-13
              • 1970-01-01
              • 1970-01-01
              • 2012-01-27
              • 2012-01-24
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多