2011-11-16 18 views
5

Android用の戻るボタンイベントをキャッチしようとしています。フォーム上にすでにこれについてたくさんあることはわかっていますが、私のコードは与えられた例としては機能しません。ここに私のコードスニペットは、イベントをキャプチャすることです:どちらかのイベントが発生してしまったことをLogCatからの出力が表示されないアンドロイドバックボタンイベントをキャッチできません

@Override 
public void onBackPressed(){ 
    Log.d(TAG, "in onBackPressed"); 
    finish(); 
} 

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event){ 
    if(keyCode == KeyEvent.KEYCODE_BACK){ 
     Log.d(TAG, "back key captured"); 
     return true; 
    } 
    return super.onKeyDown(keyCode, event); 
} 

私もこれを試してみました。誰もがこの理由を知っていますか?

ありがとうございました。

+1

まず、テストに入る前にログを追加して、このメソッドに入ることを確認します。表示されていない場合は、Viewが現在フォーカスしているViewであることを確認します。そうでなければ、onKeyイベントを取得しません。 –

+0

最初の例では、戻るボタンを押すと、デフォルトの動作が行われますか? –

答えて

15

public void onBackPressed()メソッドをオーバーライドする別の方法です。それはより簡単で簡単です。

+0

hmmm私はそれを試したところ、うまくいかなかった。私の編集を参照してください。 – coder

+3

本当ですか?それは普通のアクティビティからこれをやっていて、全く何も表示されていないのは奇妙です。デバッガに問題がないことを再確認するために、戻るボタンを押したときにトーストを表示するようにしてください。 – Brian

-1

ここで、バックキーで押されたイベントの処理方法を実装しました。

/** 
    * onKeyDown method 
    * 
    * Executes code depending on what keyCode is pressed. 
    * 
    * @param int keyCode 
    * @param KeyEvent 
    *   event KeyEvent object 
    * 
    * @return true if the code completes execution, false otherwise 
    * 
    */ 
    @Override 
    public boolean onKeyDown(int keyCode, KeyEvent event) {   
    switch (keyCode) { 
    case KeyEvent.KEYCODE_BACK: 
     Log.d(TAG, "back key captured"); 

     this.onBackPressed(); 

     //You could also use this.moveTaskToBack(true) to return to the Home screen 

     return true; 

    default: 
     return super.onKeyDown(keyCode, event); 
    } 
    }// end onKeyDown 
2

ソフトキーボードは表示されていますか?そのビューは、自分のコードがそれを処理できるようになる前に、最初にバックキーを取り除きます。

+0

私は実際に自分のカスタムキーボード – coder

+1

の方法を遅らせるためにバックキーを使用しようとしていますが、この質問につまずく他の誰かのために、http://stackoverflow.com/questions/3940127/intercept-back-button-from-ソフトキーボードは、標準のActivity#onBackPressed()アプローチが機能しない場合に非常に便利です。 – qix

8

キーボードイベントを受信するには、ビューにフォーカスが必要です。この使用を強制するには:これは私の作品

view.setFocusableInTouchMode(True); 
view.requestFocus(); 
1

最近
private long lastBackPressTime = 0; 
    @Override 
public void onBackPressed() { 
    if (this.lastBackPressTime < System.currentTimeMillis() - 4000) { 
     Toast.makeText(this, R.string.backButtonWarning, 4000).show(); 
     this.lastBackPressTime = System.currentTimeMillis(); 
    } else { 
     super.onBackPressed(); 
    } 
} 

TE apropiateリソースファイルを生成doest ADTプラグインによる問題の膨大な量の、(R)を実験してiv'e 。あなたのプロジェクトをきれいにチェックしてください

1

私の状況は珍しいかもしれませんが、私は全く同じ行動をしていたので、私はクラスと分かち合うと思っていました!その理由は、アクティビティのonResume()イベントの中で、私は別のアクティビティを開始していました。そのアクティビティはUIを表示する前に終了していましたが、サブアクティビティが終了するたびにメインアクティビティの「onResume」が継続的に呼び出され、バックボタンイベントはすべてサブアクティビティに表示されなくなりました。

関連する問題