1

我想在单击一次 BACK 键时显示一些内容,并在单击两次时关闭应用程序。

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
        if (/* BACK_KEY_was_clicked_once_again */) {
            finish();
        }
        else
        {
            text.setText(log);
        }

        return true;
    }
    return super.onKeyDown(keyCode, event);
}

抱歉我没有解释清楚

我的应用程序的主要(假设)视图是:text.setText(日志),但是当我单击菜单中的“信息”按钮时:text.setText(信息)。当设置“信息”时,我希望返回按钮:text.setText(log),当设置“日志”时,我希望返回按钮关闭我的应用程序。

现在我意识到我真正想做的事情,并将代码更改为:

public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
  if (text.getText() == log) {
    finish();
  }
  else
  {
    text.setText(log);
  }
  return true;
}
return super.onKeyDown(keyCode, event);
}
4

6 回答 6

3

使用类级别字段作为标志来检查是否按两次后退按钮:

 public static boolean backtwice=false;  //this is flag

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
        if (backtwice) {
           backtwice=false;  //reset here
            finish();
        }
        else
        {
            text.setText(log);
           backtwice=true;  //set true if first time back pressed
        }

        return true;
    }
    return super.onKeyDown(keyCode, event);
}
于 2012-12-06T17:55:20.293 回答
3

不确定您要做什么,但是

private boolean backPressed = false;
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
        if (backPressed == true) {
            finish();
        }
        else
        {
            backPressed = true;
            text.setText(log);
        }

        return true;
    }
    return super.onKeyDown(keyCode, event);
}

可能会解决您的问题...?

于 2012-12-06T17:56:08.017 回答
1

只需添加活动:

private boolean doubleBackPressedOnce = false;

@Override
protected void onResume() {
    super.onResume();
    // .... other stuff in my onResume ....
    this.doubleBackPressedOnce = false;
}

@Override
public void onBackPressed() {
    if (doubleBackPressedOnce) {
        super.onBackPressed();
        return;
    }
    this.doubleBackPressedOnce = true;
    Toast.makeText(this, R.string.exit_press_back_twice_message, Toast.LENGTH_SHORT).show();
}
于 2012-12-07T07:50:38.930 回答
0

维护一个静态布尔标志

默认情况下将标志初始化为 false。

现在像这样更改代码

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {
      if(flag == false)//indicates back button is pressed 1st time {                
           flag=true;
           //do operation for first back button press
           text.setText(log);              
       }
    else //indicating pressed 2nd time
   {
        finish();
    }
    return true;
}
return super.onKeyDown(keyCode, event);
}
于 2012-12-06T18:02:32.087 回答
0
private boolean twiBackToExitPressedOnce = false;

@Override
protected void onResume() {
    super.onResume();
    // .... other stuff in my onResume ....
    this.twiBackToExitPressedOnce= false;
}

@Override
public void onBackPressed() {
    if (twiBackToExitPressedOnce) {
        super.onBackPressed();
        return;
    }
    this.twiBackToExitPressedOnce= true;
    Toast.makeText(this, R.string.exit_press_back_twice_message, Toast.LENGTH_SHORT).show();
}
于 2012-12-06T18:13:55.447 回答
0

单击一次 BACK 键时显示某些内容,单击两次时关闭应用程序

这可以很容易地使用DoubleBackPress Android Library, 为这种情况创建。它提供了易于使用的 API,没有任何处理麻烦。

只需执行以下操作:

FirstBackPressAction firstBackPressAction = new FirstBackPressAction() {
    @Override
    public void actionCall() {
        // TODO : whatever needs to be shown on the First Back key press 
    }
};

DoubleBackPressAction doubleBackPressAction = new DoubleBackPressAction() {
    @Override
    public void actionCall() {
        // TODO : Exit app code
    }
};

DoubleBackPress doubleBackPress = new DoubleBackPress()
        .withDoublePressDuration(3000)   // msec to wait for second back press
        .withFirstBackPressAction(firstBackPressAction)
        .withDoubleBackPressAction(doubleBackPressAction);

最后,用所需的行为覆盖你的背压行为。

@Override
public void onBackPressed() {
    doubleBackPress.onBackPressed();
}

类似行为的示例 GIF

于 2018-03-11T06:32:20.807 回答