Android ListView部分变黑

时间:2012-07-11 18:08:44

标签: android listview

我有一个包含部分和条目的listView。例如..

  Supplies  (Section Item)
     Pens     (Entry Item)
     Pencils
  Groceries
     Eggs
     Lettuce
  Etc....

在我的列表适配器中,我通过这样做将节项目的背景设置为各种颜色。

  view.setBackgroundColor(Color.YELLOW);

这一切正常,直到我开始滚动,然后部分项目变黑(输入项目不这样做)。谁知道如何防止这种情况?

getView()方法的代码

public View getView(int position, View convertView, ViewGroup parent) {
    View v = convertView;

    final ItemEchelon i = items.get(position);
    if (i != null) {
        if(i.isSection()){
            SectionItemEchelon si = (SectionItem)i;
            v = vi.inflate(R.layout.item_section, null);

            v.setOnClickListener(null);
            v.setOnLongClickListener(null);
            v.setLongClickable(false);

            final TextView sectionView = (TextView) v.findViewById(R.id.tv_Name);
            sectionView.setText(si.getTitle());
            if(count == 0)
            {
                v.setBackgroundColor(Color.YELLOW);
            }
            if(count == 1)
            {
                v.setBackgroundColor(Color.GREEN);
            }
            if(count == 2)
            {
                v.setBackgroundColor(Color.RED);
            }
            if(count == 3)
            {
                v.setBackgroundColor(Color.GRAY);
            }
            count ++;
        }else{
            EntryItemEchelon ei = (EntryItemEchelon)i;
            v = vi.inflate(R.layout.item_entry, null);
            final TextView title = (TextView)v.findViewById(R.id.tv_entryTitle);
            final TextView score = (TextView)v.findViewById(R.id.tv_entryScore);

            if (title != null) 
                title.setText(ei.Name);
            if(score != null)
                score.setText(ei.Score);
        }
    }
    return v;
}

通过删除if语句来更改背景颜色来解决问题。这样做就可以在构造SectionItem时初始化颜色。

3 个答案:

答案 0 :(得分:1)

android:cacheColorHint="@android:color/transparent"

中使用此List View

答案 1 :(得分:0)

将此属性添加到Listview

android:cacheColorHint="#00000000"

比所有人都完美:)。

由于

答案 2 :(得分:0)

变量“计数”是你的问题吗?看起来你正在递增它,当滚动时,你忽略了convertView,所以总是创建一个新的视图。如果count> gt = = 4,则没有背景......

应该使用convertView提高效率,并帮助解决这个问题。

if (convertView != null)
 v = convertView;
else
{
 v = vi.inflate();
 ...
}

另一个很大的危险,如果我正确地读取你的代码,那就是你依赖于以特定顺序调用getView,第2节之前的第1节。我不会这样做...使用int位置用于确定部分的参数。