2011-09-14 9 views
1

リストビューを直線レイアウト内に配置し、リストビュー のonkeydown()メソッドをオーバーライドしたいと思います。フォーカスを制御せず、onkeydown()の変数を変更します。 onkeydownメソッドをオーバーライドする必要がありますか?falseを返しますか?またはsuper.onkeyDown()を返します。これはどんなヘルプにも非常に便利です。前もって感謝します。Onkeydownとは何ですか?返り値falseと返り値super.onkeydown()の間の違いは何ですか?

enter image description here

三のリストビューあり、及びB cは、リストビューの三項目です。 cがフォーカスされているとき、keybordで左矢印キーを押すと、デフォルトでフォーカスが得られます。そしてlistview2の最初の項目でフォーカスを取得したいのですがどうすればいいですか?

答えて

2

ntcは正確ではありません。 OSはリフレクションを使用して基本クラスのハンドラを取得しません。

falseを返すと、OSにこのイベントを処理したくないことを明示的に伝えます。 OSはViewの親ハンドラを呼び出してから(あなたのテストが示すように)これはイベントが処理されるか、トップビューに達するまで発生します。

super.OnKeyDown()を呼び出すと、基本クラスがイベントを処理できるようになります。親ビューではなく、同じビューを扱う基本クラスのハンドラです。ここで混乱しないでください。

だから、どちらか一方を使用することは、あなたが望むあなたのビューの動作に依存します。 falseを返したときに、私はあなたがreturn super.onKeyDown();

+1

はい、そうですね、私の場合はsuper.onkeydown()を返さなければなりませんが、焦点の変更は常に私が望むものとは異なることが分かりました。 – zyunchen

+0

UIがあなたにできない場合、あなたが望むものなら2度考えてもよいでしょう。ユーザーは予期しないUIの動作を混同してはいけません。 – port443

+0

デフォルトでは、システムのフォーカスが変更されると、ユーザーは混乱する可能性があります。通常の調整のみです。 – zyunchen

0

super.onkeyDown() - これはonKeyDownイベントを処理するためにスーパークラスに負担をかかります(明示的にそれを処理すると言っています)。 falseを返すと、アンドロイドはonKeyDownイベントを処理していないとみなし、super.onKeyDown()がデフォルトで呼び出されます(呼び出さずに)。

+0

のemを必要とする、あなたのケースでsupose

は...多分、親ビューの親ではないクラスの意志がonKeyDownメソッドを処理していました。 – zyunchen

+0

@zyunchen .. parentViewはobevouoslyクラスになります.. – ngesh

+0

em ..私はちょうどlistview.Andを拡張するFileListViewクラスを作成し、それをlinearlayoutに入れます。もしonkeydowなら、それを処理します。そうすれば、linearViewはそれを処理します。return super.onkeydown、listViewはそれを処理しますか?それは私の理解ではありません。 – zyunchen

関連する問題