2010-09-07 6 views
0

J'ai une mise en œuvre qui, tout comme l'application Gmail, mais a rencontré un problème dans certains cas. Et je l'ai testé sur le vrai périphérique de l'application Gmail. On dirait qu'ils sont causés par la même raison. ListView.un bogue dans android listview et adpater

Il suffit d'aller à l'application Gmail, faites défiler jusqu'à la dernière mail, et à ce moment, assurez-vous que la "conversation de chargement" au fond est toujours sur. Ensuite, appuyez longuement sur le dernier mail, et le menu contextuel apparaît. Ensuite, attendez la fin du chargement de l'e-mail en arrière-plan (vous pouvez voir que la barre de défilement se déplace vers le haut). Ensuite, vous effectuez une action dans le menu contextuel , dites "lire le message". Cependant, le mail d'affichage n'est pas celui que j'ai longtemps appuyé.

Après quelques debug, je trouve que cela devrait être lié à ListView et sa méthode de l'adaptateur getView, la « conversion vue » est réutilisé lorsque le menu contextuel apparaît, et dans ce cas, le listItemview a un champ à enregistrer l'index du courrier, tandis que la méthode getView est invoquée, le champ a été modifié.

Quelqu'un peut-il fournir une meilleure façon de résoudre ce problème?

Merci.

Répondre

0

Je peux voir rencontrer ce problème si le gestionnaire de menu de contenu s'appuie sur le position plutôt que le _ID. En particulier, si vous utilisez CursorAdapter, utilisez la valeur _ID, car cela (espérons-le) est immuable.

+0

Merci pour les conseils. Cependant, après plus de détails digg, le problème n'est pas lié à _ID/position. Mais j'ai trouvé comment résoudre le problème: il suffit d'utiliser une autre variable pour enregistrer l'identifiant de l'élément à utiliser lorsque le menu contextuel est ouvert. – user441316