2010-09-23 3 views
0

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?

Répondre

1

Je pense que l'adaptateur n'est pas un bon endroit pour ajouter la logique de liste. C'est pour aller chercher et afficher des données, pas pour prendre des décisions, quoi montrer/cacher. Comme vous pouvez le voir il n'y a aucun moyen de ne pas ajouter un View pour un index donné (dans la méthode getView()).

Vous devez filtrer votre liste avant de la transmettre à un adaptateur.

+0

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

Questions connexes