/ / Comment désactiver l'ouverture automatique de la liste déroulante dans AutoCompleteTextView lors de l'appel de notifyDataSetChanged ()? - android, menu déroulant, rafraîchissement, autocompletetextview

Comment désactiver l'ouverture automatique de la liste déroulante dans AutoCompleteTextView lorsque notifyDataSetChanged () a appelé? - Android, menu déroulant, actualiser, autocompletetextview

Voici mon problème:

Dans mon application Android, j'utilise AutoCompleteTextView etactualiser la liste des éléments toutes les 5 secondes. L'actualisation fonctionne lorsque j'appelle notifyDataSetChanged (). Mais lorsque je tape ici quelque chose et que cela me donne la liste des éléments correspondants, puis je la ferme manuellement, lorsqu'un autre thread actualise la liste et appelle la liste déroulante notifyDataSetChanged () qui s'affiche automatiquement (même si je l'ai fermée auparavant). Et c'est vraiment ennuyeux, car si la liste est longue, cela prend tout l'écran et après la fermeture, elle apparaîtra dans 5 secondes supplémentaires. J'ai essayé de rejeterDropDown () juste après avoir appelé notifyDataSetChanged (), mais cela n'a aucun effet. Il semble que la liste déroulante s'affiche avec un peu de retard. Ce n'est pas non plus un bon moyen de le corriger, car si l'utilisateur n'a pas fermé la liste sera fermée après une actualisation. A également essayé de détourner l'attention - toujours sans effet.

J'ai donc besoin d'une méthode pour: mettre à jour ma liste d'articles (via notifyDataSetChanged ()) sans afficher automatiquement la liste déroulante, mais si la liste déroulante était déjà affichée, ne la fermez pas.

J'espère que vous pourrez aider,

à votre santé


Je l'ai finalement fait. Je poste ici une solution, peut-être que quelqu'un l'utilisera.

Pour vérifier si la liste déroulante est visible:

final boolean isVisible = autocomplete.isPopupShowing();

Ensuite, appelez notifyDataSetChanged (),

Finalement:

new Handler().post(new Runnable(){

@Override
public void run() {
if(!isVisible){
autocomplete.dismissDropDown();
}
}

});

Cela fonctionne parfaitement.

Réponses:

0 pour la réponse № 1

J'ai aussi ce problème, je pense que cela semble être un bug, je l'ai résolu de la manière suivante

Tout d'abord, définissez votre propriété focusable AutoCompleteTextView sur false.

Ensuite, changez votre propriété focusable AutoCompleteTextView en true dans l'événement onTouch de cette vue. Pour cela, vous devez implémenter onTouchListener en AutoCompleteTextview.

Chaque fois que vous touchez à celaAutoCompleteTextView, vous devez remplacer la propriété focusable par true, sinon la conserver focusable par false. Pour que la liste déroulante n'apparaisse jamais lorsque la vue est dans un état flou.

Il affiche automatiquement la liste déroulante, uniquement lorsque la vue est dans un état pouvant être mis au point, ce qui est gênant pour l'utilisateur, sinon cela fonctionne bien.