戻るtrue
ことは問題ではありません。
View
リスナーをだけでなくに設定する必要があるため、失敗していますActivity
。
明確にするために編集:
リスナーの戻り値は、イベントが呼び出されるか呼び出されないかを示す信号として理解されることを意図したものではありません。とにかく、句はyourが表示された後return
にのみ呼び出されるため、それはできませんでした。Toast
これは、さらなるアクションが必要であること (return false
)、またはメソッドがイベントを完全かつ適切に処理したこと(return ) をシステムに知らせるシグナルtrue
です。そのため、ドキュメントにはこれらの言葉で次のように記載されています。
戻り値
リスナーがイベントを消費した場合は true、それ以外の場合は false。
次の違いがあります。
- クラスに を実装
View.OnKeyListener
interface
します。Activity
Activity
これにより、インターフェイスによって提供される機能をクラスに実装できます。つまり、その種のイベントの処理方法を知っていることを世界に宣言できます。Activity
「宣言する」と言ったことに注意してください。タスクを処理する方法を知っていると宣言したからといって、人々がそのタスクをあなたに与えるわけでも、そのようなタスクを自分で生成できるわけでもありません。implements
私の意見では、これはキーワードの良いメタファーです。ここではActivity
「タスクを要求」します。
比喩はさておき、技術的には、Activity
はそのイベントを処理する方法を定義していますが、それ自体でその種のイベントを生成することはできません。
View
コールバックをActivity
実装に設定する
それを使用して、 aView
はリスナー (たまたまあなたのActivity
) にバインドし、イベントが発生するたびに通知することを約束します。
と「契約」して入力を受信し (にフォーカスがActivity
あるときにユーザーが ENTER キーを押す)、 に通知します。そして、以前にそれを実行できると宣言したため、両方の当事者が以前に合意したとおりに契約を実行できます (前の項目を参照)。View
Activity
Activity
メタファーはさておき、技術的には、ここでActivity
は によって登録され、後でがイベントをトリガーしたView
ときに通知されます。View
は方法Activity
を宣言しますが、 はいつかを知っています。View
結論:
これはinterface
s の比喩にすぎません (少なくともこの場合)。複雑に見えるかもしれませんが、二者合意と考えれば一目瞭然です。より良い、技術的な説明が必要な場合は、interface
s について読むことをお勧めします。
新しいコメントの質問への回答:
こんにちは、デビッドと他の皆さん。アクティビティ全体にリスナーを設定することはできませんか?
そうではありません。オーバーライドする必要がありますdispatchKeyEvent
。例:
@Override
public boolean dispatchKeyEvent(KeyEvent e) {
if (e.getKeyCode() == KeyEvent.KEYCODE_ENTER) {
Toast.makeText(UITestsActivity.this,
"YOU CLICKED ENTER KEY",
Toast.LENGTH_LONG).show();
return true;
}
return super.dispatchKeyEvent(e);
};