Android ListView项目颜色和滚动问题

时间:2011-06-30 17:08:55

标签: android

我有一个消息传递应用程序显示已接收消息的列表但是我想突出显示未使用颜色(黄色)读取的消息,而其他列表项仍然是默认列表项颜色(白色)。

我已经设法使用下面的代码执行此操作,但每当我滚动列表时,无论是否已读取所有列表项,当它们滚出视图然后然后将是“突出显示”颜色回到视野中。

我的列表选择器:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_selected="true" android:drawable="@android:color/transparent" />
<item android:state_pressed="true" android:drawable="@android:color/transparent" />
<item android:state_selected="false" android:drawable="@drawable/messageUnreadColour" />

我的代码在我的数组适配器中应用了以下设置:

@Override
public View getView(int position, View convertView, ViewGroup parent) {

Message_ListItem entry = items.get(position);  

   ....setup list item etc

   // Get whether the message has been read
   if (!entry.getHasBeenRead()) {

      // Set the colour to highlight the listitem
      convertView.setBackgroundResource(R.drawable.message_listitem_unread);
   }

  return convertView;
}

我已经删除了列表中的cacheColorHint设置,看看这是否有帮助,但这没有效果。

有什么方法可以解决这个问题吗?

1 个答案:

答案 0 :(得分:1)

你忘记了getView()方法中的else子句。列表项目是循环使用的,因此一旦您在未读项目上设置了背景,该项目可能会被重新用作读取项目。做这样的事情:

if (!read) { setBackgroundResource(R.drawable.unread); }
else { setBackgroundResource(R.drawable.read); }