1

アプリが終了する前に戻るボタンを 2 回押すように設定するにはどうすればよいですか? トリガーしたい

@Override
public void onBackPressed() {
    //custom actions
    //display toast "press again to quit app"
    super.onBackPressed();
}
4

4 に答える 4

8

これを試して:

private boolean doubleBackToExitPressedOnce = false;

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

@Override
public void onBackPressed() {
    if (doubleBackToExitPressedOnce) {
        super.onBackPressed();
        return;
    }
    this.doubleBackToExitPressedOnce = true;
    Toast.makeText(this, "Press twice to exit", Toast.LENGTH_SHORT).show();

}

このスニペットは、アクティビティが再開されたときのリセット状態も処理します

于 2012-06-06T20:14:45.330 に答える
2

この質問は少し古いと思いますが、これは、すでに与えられた回答に代わるものを探している人に役立つかもしれません.

これが、アプリケーションのバックアウトを処理する方法です。誰かがこれを達成するためのより良い方法、またはGoogleが提案した方法を持っている場合、私は知りたいです.

編集 - これは Android 2.0 以降用であることを忘れていました。以前のバージョンでは、オーバーライドonKeyDown(int keyCode, KeyEvent event)してチェックしkeyCode == KeyEvent.KEYCODE_BACKます。ここにチェックアウトするための良いリンクがあります。

private boolean mIsBackEligible = false;

@Override
public void onBackPressed() {

    if (mIsBackEligible) {

        super.onBackPressed();

    } else {

        mIsBackEligible = true;
        new Runnable() {
            // Spin up new runnable to reset the mIsBackEnabled var after 3 seconds
            @Override
            public void run() {
                CountDownTimer cdt = new CountDownTimer(3000, 3000) {
                    @Override
                    public void onTick(long millisUntilFinished) { 
                        // I don't want to do anything onTick
                    }

                    @Override
                    public void onFinish() {
                        mIsBackEligible = false;
                    }
                }.start();
            }
        }.run(); // End Runnable()

        Toast.makeText(this.getApplicationContext(),
                "Press back once more to exit", Toast.LENGTH_SHORT).show();

    }

}
于 2014-09-20T18:23:28.690 に答える
0
@Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if (event.getAction() == KeyEvent.ACTION_DOWN) {
            switch (keyCode) {
            case KeyEvent.KEYCODE_BACK :
                int i = 0 ;
                   if(i == 1 )
                      {
                       finish();
                      }
                     i++;

                return true;
            }
        }
        return super.onKeyDown(keyCode, event);
    }
于 2012-06-06T20:31:51.007 に答える
0

グローバル整数で求めていることを実行し、それをカウントするだけで、> 2 の場合は終了できます。

しかし、より良い (IMO) アプローチを取ることもできます。そこでは、ユーザーが終了したいかどうかをユーザーに質問します。

private void questionQuit(){
    final CharSequence[] items = {"Yes, quit now", "No, cancel and go back"};

    builder = new AlertDialog.Builder(mContext);
    builder.setCancelable(false);
    builder.setTitle("Are you sure you want to quit?");
    builder.setItems(items, new DialogInterface.OnClickListener() {
        public void onClick(DialogInterface dialog, int item) {
            switch(item){
            case 0:
                quit();
                break;
            case 1:
            default:
                break;
            }
        }
    }).show();
    AlertDialog alert = builder.create();

}
于 2012-06-06T20:14:52.333 に答える