Salut!

Un truc totalement surréaliste (au moins pour moi!) me faisant tourner en bourrique!

Contexte:
-> un champ AutoCompleteTextView ville
-> utilisant une List:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
List<String> listeAffichageVille = new ArrayList<String>();
-> elle même initialisée dans onTextChanged par une requête Php dans un thread (à cause des accès réseaux)
-> à partir du 4ème caractère saisi, le champ ville propose des items de listeAffichage
-> onItemClick récupère l'item de la position clickée
Ok.....

Là ou ça se corse:
1er point, déjà louche: le thread de remplissage de la liste est relancé par le onItemClick une fois de plus(???)

et ensuite, son comportement n'est pas identique, il ramène de 1 à n lignes, alors qu'on ne clique que sur une seule ligne des propositions faites!

C'est vraiment compliqué à expliquer, et je ne sais pas si je suis clair, alors essayons des exemples:

ex1:
-> je tape MARS, ville me propose donc des villes connues de Php débutant par MARS
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 
12-11 11:11:06.850: E/Thread-----------> 0(6257): Mars (Ardèche, Rhône-Alpes)
12-11 11:11:06.850: E/Thread-----------> 1(6257): Mars (Dordogne, Aquitaine)
12-11 11:11:06.850: E/Thread-----------> 2(6257): Mars (Gard, Languedoc-Roussillon)
12-11 11:11:06.850: E/Thread-----------> 3(6257): Mars (Loire, Rhône-Alpes)
12-11 11:11:06.850: E/Thread-----------> 4(6257): Marsa (Aude, Languedoc-Roussillon)
12-11 11:11:06.850: E/Thread-----------> 5(6257): Marsac (Charente, Poitou-Charentes)
12-11 11:11:06.850: E/Thread-----------> 6(6257): Marsac (Creuse, Limousin)
12-11 11:11:06.850: E/Thread-----------> 7(6257): Marsac (Gironde, Aquitaine)
12-11 11:11:06.850: E/Thread-----------> 8(6257): Marsac (Hautes-Pyrénées, Midi-Pyrénées)
12-11 11:11:06.850: E/Thread-----------> 9(6257): Marsac (Tarn-et-Garonne, Midi-Pyrénées)
12-11 11:11:06.850: E/Thread-----------> 10(6257): Marsal (Dordogne, Aquitaine)
12-11 11:11:06.850: E/Thread-----------> 11(6257): Marsal (Moselle, Lorraine)
12-11 11:11:06.850: E/Thread-----------> 12(6257): Marsal (Tarn, Midi-Pyrénées)
12-11 11:11:06.850: E/Thread-----------> 13(6257): Marsal (Rhône-Alpes)
12-11 11:11:06.850: E/Thread-----------> 14(6257): Marsan (Creuse, Limousin)
12-11 11:11:06.850: E/Thread-----------> 15(6257): Marsan (Gers, Midi-Pyrénées)
12-11 11:11:06.850: E/Thread-----------> 16(6257): Marsan (Loiret, Centre)
12-11 11:11:06.850: E/Thread-----------> 17(6257): Marsan (Rhône-Alpes)
12-11 11:11:06.850: E/Thread-----------> 18(6257): Marsas (Gironde, Aquitaine)
12-11 11:11:06.850: E/Thread-----------> 19(6257): Marsas (Hautes-Pyrénées, Midi-Pyrénées)
-> je sélectionne "Mars (Gard)", le thread est relancé et ramène
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
12-11 11:11:11.410: E/Thread-----------> 0(6257): Mars (Ardèche, Rhône-Alpes)
12-11 11:11:11.410: E/Thread-----------> 1(6257): Mars (Dordogne, Aquitaine)
12-11 11:11:11.410: E/Thread-----------> 2(6257): Mars (Gard, Languedoc-Roussillon)
12-11 11:11:11.410: E/Thread-----------> 3(6257): Mars (Loire, Rhône-Alpes)
DONC 4 lignes...

ex2: (toujours le même code source of course!)
-> je tape MULH, ville me propose donc des villes connues de Php débutant par MULH
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
12-11 11:11:26.930: E/Thread-----------> 0(6257): Mulheim (Province de Limbourg)
12-11 11:11:26.930: E/Thread-----------> 1(6257): Mulhouse (Haut-Rhin, Alsace)
12-11 11:11:26.930: E/Thread-----------> 2(6257): Mulhausen (Bas-Rhin, Alsace)
-> je sélectionne "Mulhouse (Haut Rhin), le thread est relancé et ramène
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
12-11 11:11:28.340: E/Thread-----------> 0(6257): Mulhouse (Haut-Rhin, Alsace)
DONC 1 ligne........

ex3: (toujours le même code source of course!)
-> je tape PERR, ville me propose donc des villes connues de Php débutant par PERR
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 
12-11 11:34:01.310: E/Thread-----------> 0(6825): Perre (Indre-et-Loire, Centre)
12-11 11:34:01.310: E/Thread-----------> 1(6825): Perre (Flandre Orientale)
12-11 11:34:01.310: E/Thread-----------> 2(6825): Perran (Bretagne)
12-11 11:34:01.310: E/Thread-----------> 3(6825): Perray (Indre-et-Loire, Centre)
12-11 11:34:01.310: E/Thread-----------> 4(6825): Perret (Côtes-d'Armor, Bretagne)
12-11 11:34:01.310: E/Thread-----------> 5(6825): Perret (Rhône-Alpes)
12-11 11:34:01.310: E/Thread-----------> 6(6825): Perrex (Ain, Rhône-Alpes)
12-11 11:34:01.310: E/Thread-----------> 7(6825): Perros (Finistère, Bretagne)
12-11 11:34:01.310: E/Thread-----------> 8(6825): Perros (Finistère, Bretagne)
12-11 11:34:01.310: E/Thread-----------> 9(6825): Perros (Bretagne)
12-11 11:34:01.310: E/Thread-----------> 10(6825): Perrou (Orne, Basse-Normandie)
12-11 11:34:01.310: E/Thread-----------> 11(6825): Perroy (Nièvre, Bourgogne)
12-11 11:34:01.310: E/Thread-----------> 12(6825): Perroy ()
12-11 11:34:01.310: E/Thread-----------> 13(6825): Perreux (Loire, Rhône-Alpes)
12-11 11:34:01.310: E/Thread-----------> 14(6825): Perreux (Yonne, Bourgogne)
12-11 11:34:01.310: E/Thread-----------> 15(6825): Perrier (Dordogne, Aquitaine)
12-11 11:34:01.310: E/Thread-----------> 16(6825): Perrier (Puy-de-Dôme, Auvergne)
12-11 11:34:01.310: E/Thread-----------> 17(6825): Perruel (Eure, Haute-Normandie)
12-11 11:34:01.310: E/Thread-----------> 18(6825): Perrelli (Corse)
12-11 11:34:01.310: E/Thread-----------> 19(6825): Perreuil (Saône-et-Loire, Bourgogne)
-> je sélectionne "Perret (Côtes-d'Armor)" (le 5ème de la liste, indice 4 donc), le thread est relancé et ramène
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
12-11 11:34:26.750: E/Thread-----------> 0(6825): Perret (Côtes-d'Armor, Bretagne)
12-11 11:34:26.750: E/Thread-----------> 1(6825): Perret (Rhône-Alpes)
DONC 2 lignes cette fois-ci........
-> et BOUM!
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
java.lang.IndexOutOfBoundsException: Invalid index 4, size is 2
puisque l'indice récupéré par onItemClick est le bon, 4 ici.... mais comme le thread est relancé au moment du onItemClick et qu'il ne ramène que 2 lignes, on est hors index!


Pourquoi ça me gène
-> d'abord parce que je ne trouve pas ce comportement normal
-> et ensuite, surtout parce que parfois, la position ramenée par onItemClick n'est pas la bonne, et donc crache l'appli (java.lang.IndexOutOfBoundsException) pour un mauvais index.
-> le tout étant "aléatoire" puisque durant mon dev je testais avec 1 ou 2 villes, toujours les mêmes, et RAS
-> là j'arrive au bout, donc je teste un peu plus "intensément".... et c'est là que je me rend compte du problème....

Ai-je réussi à me faire comprendre par ces exemples?

Une idée peut être?
Qu'est ce qui m'échappe?

Merci.