1

BACKキーを1回クリックすると何かを表示し、2回クリックするとアプリを閉じたいです。

@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(log)ですが、メニューの「info」ボタンをクリックすると、text.setText(info)になります。「情報」が設定されている場合は、戻るボタンを 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

クラス レベル フィールドをフラグとして使用して、[戻る] ボタンが 2 回押されたかどうかを確認します。

 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 に答える