2012-01-31 8 views
5

私のカスタムビュー(例えば、EditText)で戻るキーイベントを検出したいと思います。多くの場合、私のCustomViewがフォーカスを取得するという条件の下でonKeyDown()またはdispatchKeyEvent()をオーバーライドすることによって達成されています。 CustomViewを含む活動もonKeyDown()またはdispatchKeyEvent()をオーバーライドしている場合私のカスタムビューで戻るキーを検出する方法

CustomView.java

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    if(keyCode == KeyEvent.KEYCODE_BACK) { 
     ..... 
     return true; 
    }else{ 
     return super.onKeyDown(keyCode, event); 
    } 
} 

しかし、それは多くの仕事ができませんでした。つまり、アクティビティは、CustomViewの前にBack-KeyEventを取得しています。

私は優先的に、アクティビティの前にBack-KeyEventをキャッチしたいと思っています。

この問題に関するいくつかのアイデアを教えてください。 ありがとうございます。

答えて

0

アクティビティのonKeyDownをオーバーライドし、を返します。偽を返します。イベントが他のビューにも伝播するようにします。

イベントを処理した場合はtrueを返します。イベント を次の受信者が処理できるようにするには、falseを返します。あなたはそれがIMEにディスパッチされる前に、BACKボタンをキャプチャするためにこれを実装する必要が

+2

それほど真実ではありません。メソッド 'onKeyDown'は、キーが押されたときに呼び出され、アクティビティ内のいずれのビューでも処理されないときに呼び出されます。まず、フォーカスされたビューでonKeyDown、次にアクティビティでonKeyDownを呼び出します。 –

+0

しかし、私たちがfalseを返す限り、それは次の受信者に行くでしょう。右?これを行うには@MoshErsanの回答が望ましいかもしれませんが。しかし、質問に記載されているように、onKeyDownはすでにActivityでオーバーライドされているので、何があってもfalseを返さなければなりません! :) –

+2

あなたの言うとおりです。あなたの好意によって、私はメソッドが呼び出される順序について理解することができました。実際に試してみたとき、それは 'View#onKeyPreIme'、' Activity#dispatchKeyEvent'、 'View#dispatchKeyEvent'、 'View#onKeyDown'、そして最後に' Activity#onKeyDown'でした。ありがとう! – Gottie

0

あなたのCustomViewに

setFocusableInTouchMode(true) 
setFocusable(true) 
requestFocus() 

を使用しようとすることができ

関連する問題