Android,适配器:通过getView()过滤仍然会留下灰线

时间:2010-09-23 08:51:01

标签: android filtering listadapter

我的应用程序使用手机上的媒体文件列表,即图像,音频和视频。它还允许用户通过菜单中的某些复选框过滤列表,因此用户可以选择显示或隐藏每种类型的文件。

我这样做的方法是将它放在适配器的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,这意味着每当一组连续项被过滤掉时,我会看到一条粗灰线。

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

1 个答案:

答案 0 :(得分:1)

我认为Adapter不是添加列表逻辑的好地方。它用于获取和显示数据,而不是用于制定决策,显示/隐藏什么。如您所见,无法为给定索引添加View(在getView()方法中)。

您应该先过滤列表,然后再将其传递给适配器。