Android ListView: comment sélectionner un élément?
Je vais avoir des ennuis avec une ListView j'ai créé: je veux un élément pour le sélectionner quand je clique sur elle.
Mon code pour que cela ressemble:
protected void onResume() {
...
ListView lv = getListView();
lv.setOnItemSelectedListener(new OnItemSelectedListener()
{
public void onItemSelected(AdapterView<?> adapterView, View view, int pos, long id) {
Log.v(TAG, "onItemSelected(..., " + pos + ",...) => selected: " + getSelectedItemPosition());
}
public void onNothingSelected(AdapterView<?> adapterView) {
Log.v(TAG, "onNothingSelected(...) => selected: " + getSelectedItemPosition());
}
});
lv.setOnItemClickListener(new OnItemClickListener()
{
public void onItemClick(AdapterView<?> adapterView, View view, int pos, long id) {
lv.setSelection(pos);
Log.v(TAG, "onItemClick(..., " + pos + ",...) => selected: " + getSelectedItemPosition());
}
});
...
}
Lorsque je l'exécute et cliquez par exemple sur le second élément (c'est à dire pos=1) j'obtiens:
04-03 23:08:36.994: V/DisplayLists(663): onItemClick(..., 1,...) => selected: -1
c'est à dire même si la OnItemClickListener est appelée avec l'argument approprié et appelle une setSelection(1), il n'existe aucun élément sélectionné (et donc aussi OnItemSelectedListener.onItemSelected(...) n'est jamais appelée) et getSelectedItemPosition() correspond toujours à -1 après le setSelection(1)-appel.
Ce qui me manque?
Michael
PS.: Ma liste ne avez - >=2 éléments...
OriginalL'auteur mmo | 2012-04-03
Vous devez vous connecter pour publier un commentaire.
L'élément manquant est ici
choiceMode
. Ce n'est pas terriblement bien documenté, mais ListViews (et, par extension, tout ce qui hérite de AbsListView, comme GridView, etc.) dans android par défaut ne permettent pas de sélection, mais il peut être activé soit en XML ou dans le code:en XML:
Code:
Noter qu'une fois que vous faites cela, android sera
setSelection()
pour vous, donc vous n'avez pas besoin de garder une trace de vous-même. À ce moment, le onClickListener est juste pour enregistrer la sélection et je n'ai même pas pris la peine avec le OnSelectedItemListener :J'ai ajouté le mode de choix comme décrit (dans les deux variantes), mais pas de changement! Le OnItemClickListener ne veut toujours pas appelé. Et que même si je reçois une réaction à l'écran, c'est à dire l'élément peu de temps tourne au violet, puis de nouveau au blanc de nouveau. Assez étrange, j' sélectionner des éléments en appuyant sur les boutons haut et bas (et puis les OnIemSelectListener est appelé), mais évidemment pas par l'intermédiaire d'OnItemClickListener.
Attendre, alors OnItemClick n'est jamais appelé? OnItemSelect auditeur est configuré uniquement pour le pavé tactile vers le haut/vers le bas de trucs qu'Il ne répond pas aux clics et je ne sais pas si oui ou non il va répondre à un appel manuel de setSelection
Parce que vous travaillez sur un téléphone avec des commandes hybrides, vous pouvez avoir à la fois le onItemSelected() l'appel et le onClick() point d'appel à la même fonction (de votre définition) si vous voulez la même fonctionnalité pour les deux événements. Il y a des bizarreries qui travaillent en mode tactile vs non-mode tactile qu'honnêtement, je ne connais pas trop.
C'est encore plus étrange: OnItemClick t appelée (avec la bonne position). Il appelle setSelection(pos), qui est ignorée (c'est à dire qu'il n'a aucun effet. Après l'appel de la selectedItemPosition est toujours -1).
OriginalL'auteur JRaymond
Essayez ceci:--
Espère que ça va vous aider.
OriginalL'auteur Hulk
Je viens de réaliser que j'étais complètement à côté. En touche mode, il n'est pas utile à tous, pour sélectionner un élément. Vous avez juste la possibilité d'agir directement sur elle, lorsqu'il est cliqué (et le OnClickListener est appelé).
Je commence tout juste à apprécier, que Android prend soin de tous ces différents dispositifs, qui ont de direction boutons de commande, les écrans tactiles, etc. Ce n'est pas toujours facile d'imaginer comment une opération est effectuée sur un appareil que l'on n'est pas utilisé ou ne peut pas tester.
OriginalL'auteur mmo