12
votes

Android: abslistview.onscrolllistener Scroll_State_idle n'est pas appelé après Scroll_State_Touch_scroll (version 2.1)

J'ai un problème avec Android Version 2.1. Cela ressemble à un bug.

J'ai joint un Onscrolllistener à ma listeView.

J'utilise la méthode OnscrollstatCHanged (AbslistView View, int ScrollState) Pour surveiller l'état de Scroll de Mes ListView.

Le ScrollState pourrait assumer 3 valeur (prise de la documentation):

  1. scroll_state_fling : l'utilisateur avait défilement précédemment utilisé en utilisant toucher et avait effectué un flan. Le L'animation est maintenant côtière à un arrêt
  2. scroll_state_idle : la vue n'est pas défilement. Remarque Navigation de la liste en utilisant les chiffres de trackball comme étant Dans l'état de ralenti depuis ces Les transitions ne sont pas animées.
  3. scroll_state_touch_scroll : l'utilisateur défile en utilisant le toucher et leur le doigt est toujours à l'écran

    Je suppose que la scroll_state_idle sera toujours transmise après l'un des deux autres états. C'est toujours vrai à l'exception de la version 2.1 Android. Scroll_State_idle n'est pas passé après Scroll_State_Touch_scroll Le problème se produit également si vous arrêtez le fling par une touche au lieu de laisser le défilement s'arrêter en soi. Ce comportement étrange laisse à ma listeView dans un état de l'inconstance.

    Certainelelse a le même problème? Suggestion pour un travail "non si sale" autour?


0 commentaires

4 Réponses :


5
votes

Je pense qu'il y a un bug qui a été enregistré pour ce cas.

http://code.google.com/p/andrroid/ Problèmes / détail? ID = 5086


0 commentaires

2
votes

J'ai eu un problème similaire sur 2.2.

Si la liste est assez grande, et je fais défiler le bas, j'ai eu la première croll_state_touch_scroll alors que mon doigt est à l'écran. Quand mon doigt quitte l'écran, j'ai eu le Scroll_State_fling. Quand ma vue a cessé de bouger, j'ai eu le Scroll_State_idle.

Mais, si lors du rouleau, il atteint le haut ou le bas, je ne sauls que des valeurs de défilement / de flan et que jamais le ralenti.

J'ai vérifié le projet d'étagères de Romain Guy et sa mise en œuvre subit le même problème sur 2.2.x Je me demande s'il l'avait remarqué.

Je n'ai pas encore essayé avec 2.3.x


0 commentaires

2
votes

J'ai trouvé quelque chose d'une solution de contournement pour cela (au moins pour l'API Niveau 9+, où je vois toujours le bogue). J'utilise une grille de grille, mais je pense que cela devrait également fonctionner à ListView.

J'utilise une sous-classe de grille de grille où je détecte la survolte (haut ou bas): p> xxx Pré>

Puis, dans mon ONScrollListener de CustomGriDview, j'ai: P>

 @Override
 public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount,
                             int totalItemCount) {
   if (gridView.isOverScrolled()) {
     gridView.clearOverScroll();
   }

   // ...
 }


0 commentaires

0
votes

J'ai eu ce même problème et j'ai posté une solution de contournement sur la liste des bugs mentionnée par Deragan: Lien


0 commentaires