我已经为ListView创建了一个适配器,如果它们具有我指定的值,我想以编程方式更改某些行的颜色。
下面的代码显示了如何实现。发生了两件奇怪的事情:
1)第一行应该画,但不是;
2)其他行(除了第一行)是丰富多彩的,但是当你执行滚动时它会丢失背景颜色。
public View getView (int position, View convertView, ViewGroup parent ) {
convertView = (RelativeLayout) inflater.inflate( resource, null );
Content Legend = getItem( position );
TextView name = (TextView) convertView.findViewById(R.id.name);
name.setText(Legend.getName());
TextView value = (TextView) convertView.findViewById(R.id.value);
if (Legend.getValue().equals("Color")){
convertView.setBackgroundColor(Color.GRAY);
Legend.setValue("");
}*/
value.setText(Legend.getValue());
return convertView;
}
答案 0 :(得分:0)
listView中的视图将被重用,试着认为你将每个视图设置在一个地方。因此,您需要考虑所有情况,添加其他{}
if (Legend.getValue().equals("Color")){
convertView.setBackgroundColor(Color.GRAY);
Legend.setValue("");
} else {
//set background and other value if not equals "color"
}
答案 1 :(得分:0)
static class ViewHolderItem {
TextView name, value;
public ViewHolderItem(View view) {
name = (TextView) view.findViewById(R.id.name);
value = (TextView) view.findViewById(R.id.value);
}
@Override
public View getView(final int position, View convertView, final ViewGroup parent) {
ViewHolderItem holder;
if (convertView == null) {
convertView = inflater.inflate(R.layout.xxx, parent, false);
holder = new MyHolder(convertView);
convertView.setTag(holder);
} else {
holder = (MyHolder) convertView.getTag();
}
Content Legend = getItem( position );
holder.name.setText(Legend.getName());
if (Legend.getValue().equals("Color")){
convertView.setBackgroundColor(Color.GRAY);
holder.value.setText("whatever you wanna show or keep it empty");
//whatever you wanna do
}
else{
holder.value.setText(Legend.getValue());
}