我有一个包含部分和条目的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时初始化颜色。
答案 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位置用于确定部分的参数。