【问题标题】:App exit on double tab in android在android中的双标签上退出应用程序
【发布时间】:2015-01-29 12:35:27
【问题描述】:

我只想在连续双击时退出应用程序。我正在使用片段类。我使用了下面的代码,但不起作用

private long lastPressedTime;
private static final int PERIOD = 2000;

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (event.getKeyCode() == KeyEvent.KEYCODE_BACK) {
    switch (event.getAction()) {
    case KeyEvent.ACTION_DOWN:
        if (event.getDownTime() - lastPressedTime < PERIOD) {
            finish();
        } else {
            Toast.makeText(getApplicationContext(), "Press again to exit.",
                    Toast.LENGTH_SHORT).show();
            lastPressedTime = event.getEventTime();
        }
        return true;
    }
}
return false;
}

请指导我如何在应用中实现这一点。

【问题讨论】:

    标签: android double exit tap


    【解决方案1】:
    @Override
    public void onBackPressed() {}
    

    在您的活动中,因为活动负责处理后退按钮

    查看this 问题,它没有得到公认的答案,但包含一些解决方案

    【讨论】:

      【解决方案2】:

      删除您在 onKeydown 中的实现并尝试此代码

      @Override
      public void onBackPressed() {
          if (doubleBackToExitPressedOnce) {
              super.onBackPressed();
              return;
          }
      
          this.doubleBackToExitPressedOnce = true;
          Toast.makeText(this, "Please click BACK again to exit", Toast.LENGTH_SHORT).show();
      
          new Handler().postDelayed(new Runnable() {
      
              @Override
              public void run() {
                  doubleBackToExitPressedOnce=false;                       
              }
          }, 2000);
      } 
      

      【讨论】:

      • 现在收到此错误“Fragment 类型的 onBackPressed() 方法未定义”
      • 在您的活动中声明 onBackPressed()!
      【解决方案3】:

      试试这个:

          private boolean doubleBackToExitPressedOnce;
      
      @Override
      public void onBackPressed() {
          Log.i(tag, "Start: On Back Pressed!");
      
          if (doubleBackToExitPressedOnce) {
              Log.i(tag, "Double Back Pressed!");
      
              super.onBackPressed();
              return;
          }
          doubleBackToExitPressedOnce = true;
          Toast.makeText(this, R.string.msg_exit, Toast.LENGTH_SHORT).show();
      
          Timer t = new Timer();
          t.schedule(new TimerTask() {
      
              @Override
              public void run() {
                  doubleBackToExitPressedOnce = false;
              }
          }, 2500);
      
      }
      

      不要忘记在 onResume 中添加这一行:

      @Override
      protected void onResume() {
          doubleBackToExitPressedOnce = false;
      }
      

      【讨论】:

      • 确保将其粘贴到活动类中,而不是片段中
      猜你喜欢
      • 2012-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-21
      • 2012-11-10
      相关资源
      最近更新 更多