我的应用程序使用手机上的媒体文件列表,即图像,音频和视频。它还允许用户通过菜单中的某些复选框过滤列表,因此用户可以选择显示或隐藏每种类型的文件。
我这样做的方法是将它放在适配器的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仍会在每个视图之间呈现1px灰线,即使它们是ViewStubs,这意味着每当一组连续项被过滤掉时,我会看到一条粗灰线。
我怎样摆脱那些线?我应该创建一个新的数据数组,只包含应该显示视图的元素吗?
答案 0 :(得分:1)
我认为Adapter不是添加列表逻辑的好地方。它用于获取和显示数据,而不是用于制定决策,显示/隐藏什么。如您所见,无法为给定索引添加View(在getView()方法中)。
您应该先过滤列表,然后再将其传递给适配器。