J'ai un champ de liste d'objets personnalisé avec une routine de défilement implémentée.moveFocus n'est pas appelé
public int moveFocus(int amount, int status, int time) {
invalidate(getSelectedIndex());
int unused = super.moveFocus(amount, status, time);
return Math.abs(unused) + 1;
}
public boolean navigationMovement(int dx, int dy, int status, int time) {
if (dy > 0) {
if (selectedIndex < getSize() - 1) {
setSelectedIndex(selectedIndex + 1);
}
} else if (dy < 0) {
if (selectedIndex > 0) {
setSelectedIndex(selectedIndex - 1);
}
}
return true;
}
Scrolling fonctionne très bien quand je défiler avec molette, mais se brise lorsque l'application est lancée sur un appareil avec boule de commande. J'ai compris que ce problème réside dans cadre méthode moveFocus qui n'est pas appelé du tout lorsque je fais défiler avec trackball.
Qui définit si elle est consommée ou non. Retourne true pour consommer, false sinon. Ainsi, votre navigationMovement consommait l'événement avant que votre moveFocus puisse le traiter. Votre documentation de Field mal lu. Cela dit juste de ne pas consommer l'événement si cette fonction n'est pas remplacée mais la sous-classe. C'est peut-être un peu flou, mais cela fonctionne comme prévu. – Fostah
Je pense que vous n'avez pas lu la description du problème attentivement. Quand je retourne TRUE, j'obtiens un comportement différent qui dépend si j'utilise TRACKWHEEL ou TRACKBALL. Dans le cas de TRACKWHEEL, 'moveFocus' est appelé, par contre si TRACKBALL est la source de l'événement, alors' moveFocus' n'est pas appelé. – nixau
Quand je retourne FALSE dans la méthode 'navigationMovement'' moveFocus' n'est pas appelé du tout! – nixau