设置列表项背景颜色丢失突出显示

时间:2010-08-03 18:31:47

标签: android listview highlight listactivity background-color

我创建了一个收件箱活动,我正在镜像Android附带的默认Mail应用程序的一些功能。

在Mail中,未读取的邮件的背景颜色比列表中其他项目的颜色浅。我通过在我的Adapter的getView方法中设置调用setBackgroundResource来镜像这个。 setBackgroundColor不做任何事情。

        if (!msgSum.getIsRead()) {
            LinearLayout l = (LinearLayout) v.findViewById(R.id.inbox_background);
            if (l != null) {
                l.setBackgroundResource(R.color.inbox_unread);
            }
        }
        else {
            LinearLayout l = (LinearLayout) v.findViewById(R.id.inbox_background);
            if (l != null) {
                l.setBackgroundResource(R.color.inbox_read);
            }
        }

问题是,项目失去了突出显示的能力。我的意思是,通常如果您在使用模拟器时滚动鼠标滚轮(或者如果您的Android设备具有某种滚动功能,则使用它),列表项将变为黄色,就像它们具有焦点一样。

如何在不失去突出显示列表项的能力的情况下完成我想要做的事情?

感谢您的帮助

2 个答案:

答案 0 :(得分:7)

这是因为突出显示在列表项后面。您需要为项目的背景创建一个可绘制的状态列表,在所选状态下将背景颜色设置为透明。如果您查看我在Google I / O 2010上提供的关于ListView的讨论,您将获得如何执行此操作的示例。

答案 1 :(得分:2)

Per Romain Guy的建议,我在YouTube上观看了“Google I / O 2010 - ListView世界”视频。大约31:43分钟,他发布了一段代码解决了这个问题。你必须做一些修改(我正在开发2.1)。首先,您必须在选择器标记中声明xmlns:android参数。在Java代码中,必须调用convertView.setBackgroundResource(R.drawable.yourselector),而不是setBackground(它似乎不再存在)。