0

我有一个带有部分和条目的 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 时必须初始化颜色。

4

3 回答 3

1

android:cacheColorHint="@android:color/transparent"在你的使用这个List View

于 2012-07-11T18:14:21.563 回答
0

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

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

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

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

于 2012-07-11T19:44:56.037 回答
0

将此属性添加到您的列表视图

android:cacheColorHint="#00000000"

比一切都完美:)。

谢谢

于 2012-07-11T18:17:14.140 回答