2010-09-23 45 views
0

我的应用程序使用手机上的媒体文件列表,即图像,音频和视频。它还允许用户通过菜单中的某些复选框过滤列表,以便用户可以选择显示或隐藏每种类型的文件。Android,适配器:通过getView()过滤仍然留下灰线

我一直在这样做的方式是把这个在适配器的getView():

 // 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);; 
      } 
     } 

这是相当有效的意义上说,列表不显示这些元素。但是,ListView仍然会在每个View之间呈现1px灰线,即使它们是ViewStub,也就是说,只要过滤掉一组连续项目,就会看到粗灰线。

我该如何摆脱这些线?我应该创建一个新的数据数组,只包含应显示视图的元素吗?

回答

1

我认为适配器不是一个添加列表逻辑的好地方。它用于提取和显示数据,不用于做出决定,显示/隐藏什么。正如你所看到的,没有办法不给给定的索引添加View(在getView()方法中)。

在将它传递给适配器之前,您应该过滤您的列表。

+0

这很有道理。我被适配器中有两个数据数组的想法拖延了(其中一个包含所有数据,其中一个仅包含我想展示的数据) - 但是我想没有理由将所有数据都包含在内 - 这是本质上是一个缓存,在适配器中。缓存和过滤器逻辑应该在外面,并且适配器应该直接显示其预先过滤的内容。 – juell 2010-09-23 12:13:29