2011-09-14 1 views
1

Je mets une vue de liste dans une linearlayout, et je veux surcharger la méthode onkeydown() dans ListView , et je ne contrôle pas le focus, juste change certaines variables dans onkeydown(), je veux faire comme si je Ne remplacez pas la méthode onkeydown. Que devrais-je faire? return false? ou retour super.onkeyDown() ?. Ce sera très agréable pour toute aide. Merci d'avance.Onkeydown quelle est la différence entre return false et return super.onkeydown()?

enter image description here

il y a trois listviews, et a b c sont trois point de listviews. quand c est focalisé, quand j'appuie sur la flèche gauche du keybord, un focus est activé par défaut. Et je veux que le premier élément de listview2 se concentre, comment puis-je faire?

Répondre

2

ntc n'est pas exactement correct. Le système d'exploitation n'utilise pas la réflexion pour obtenir le gestionnaire de votre classe de base.

Si vous renvoyez false, vous dites explicitement à OS que vous ne voulez pas gérer cet événement; OS appelle alors le parent parent de la vue (comme le montre votre test); Cela se produit jusqu'à ce que l'événement soit traité ou que la vue du haut soit atteinte.

Si vous appelez super.OnKeyDown(), vous autorisez votre classe de base à traiter l'événement. Notez que c'est un gestionnaire de classe de base servant la même vue, pas la vue parente; ne pas confondre ici. Ainsi, l'utilisation de l'un ou de l'autre dépend du comportement de votre vue souhaité.

Je supose dans votre cas, vous devez return super.onKeyDown();

+1

oui, vous avez raison, je l'ai eu.et dans mon cas je devrais retourner super.onkeydown() .Mais j'ai trouvé que les changements de focus ne plaisent pas toujours ce que je veux. – zyunchen

+0

Si l'interface utilisateur ne vous le permet pas, vous pouvez réfléchir à deux fois si c'est ce que vous voulez. L'utilisateur ne doit pas être confondu avec un comportement inattendu de l'interface utilisateur. – port443

+0

changement de focus du système par défaut peut rendre les utilisateurs confus, ce que je veux est seulement pour l'ajuster normal .. Je vais poster une photo pour le rendre clair – zyunchen

0

super.onkeyDown() - ceci place la charge sur la super classe pour gérer l'événement onKeyDown par vos propres souhaits (Vous avez explicitement dit de le gérer). Lorsque vous renvoyez false, android suppose que vous n'avez pas géré l'événement onKeyDown et que super.onKeyDown() est appelé par défaut (sans que vous l'appeliez).

+0

em ... peut-être quand return false, la vue parent non de classe parent a géré la onKeyDown. – zyunchen

+0

@zyunchen .. parentView est obevouosly sera une classe .. – ngesh

+0

em..Je viens de créer une classe FileListView qui étend listview.Et je l'ai mis dans une linearlayout. si onyydow, retrun flase.then linearlayout va le gérer, si retour super.onkeydown, listView le gérera? right? que c'est ma compréhension dont je ne suis pas sûr. – zyunchen

Questions connexes