Mon application utilise une liste de fichiers multimédias sur le téléphone, c'est-à-dire des images, audio et vidéo. Il permet également à l'utilisateur de filtrer la liste via des cases à cocher dans un menu, afin que l'utilisateur puisse choisir d'afficher ou de masquer chaque type de fichier.Android, Adaptateur: Filtrer via getView() laisse toujours des lignes grises
La façon dont je l'ai fait cela est en mettant cela en getView() de l'adaptateur:
// don't show unwanted file types
if (cmo.hasType(MediaType.AUDIO_FILE)){
if(!prefs.getBoolean(PREFS_SHOWAUDIO, true)){
return new ViewStub(mContext);;
}
}else if(cmo.hasType(MediaType.IMAGE_FILE)){
if(!prefs.getBoolean(PREFS_SHOWIMG, true)){
return new ViewStub(mContext);;
}
}else if(cmo.hasType(MediaType.VIDEO_FILE)){
if(!prefs.getBoolean(PREFS_SHOWVIDEO, true)){
return new ViewStub(mContext);;
}
}
qui est tout à fait efficace dans le sens que la liste ne montre pas ces éléments. Cependant, ListView affiche toujours une ligne grise 1px entre chaque vue, même si elles sont ViewStubs, ce qui signifie que je vois une ligne grise épaisse chaque fois qu'un groupe d'éléments consécutifs est filtré.
Comment puis-je me débarrasser de ces lignes? Dois-je créer un nouveau tableau de données contenant uniquement les éléments devant afficher une vue?
Cela a du sens. J'ai été rebuté par l'idée d'avoir deux tableaux de données dans l'adaptateur (un avec toutes les données, un avec seulement ceux que je veux montrer) - mais je suppose qu'il n'y a aucune raison d'avoir celui avec toutes les données - qui est essentiellement un cache, dans l'adaptateur. La logique de cache et de filtrage doit être à l'extérieur, et l'adaptateur doit simplement afficher son contenu, qui est pré-filtré, d'une manière simple. – juell