更改影响第一项的列表视图中最后一项的颜色
Change the color of the last item in a list view affecting the first item
我正在尝试更改列表视图中最后一个项目的颜色,这很好,它工作正常,但是当我向后滚动时,列表视图的第一个项目也发生了变化,我不知道为什么会这样正在发生,这是我的代码:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View vi = convertView;
final ViewHolder holder;
if (inflater == null)
inflater = (LayoutInflater) activity
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
if (convertView == null) {
vi = inflater.inflate(R.layout.list_row_user, null);
holder = new ViewHolder();
holder.title = (TextView) vi.findViewById(R.id.text1);
holder.icon = (ImageView) vi.findViewById(R.id.icon);
vi.setTag(holder);
} else {
holder = (ViewHolder) vi.getTag();
}
holder.title.setText(lista[position]);
if (position == lista.length -1) {
holder.icon.setVisibility(View.VISIBLE);
holder.title.setTextColor(0xFF999999);
holder.title.setPadding(0, 20, 0, 0);
}
return vi;
}
public class ViewHolder {
TextView title;
ImageView icon;
}
您还必须像下面一样添加 else 部分
if (position == lista.length -1) {
holder.icon.setVisibility(View.VISIBLE);
holder.title.setTextColor(0xFF999999);
holder.title.setPadding(0, 20, 0, 0);
}else{
holder.title.setTextColor(otherColor);
}
发生这种情况的原因是列表项被回收,即,当您滚动浏览列表时,出于性能原因重复使用相同的项目对象(convertView != null 意味着之前膨胀和装饰的项目被重新-已使用并传递给您进行重新装修)。
这反过来意味着您不应依赖项目的任何默认属性,而应显式设置可能被任何其他项目更改的所有属性,如 .[=11 中所建议的那样=]
我正在尝试更改列表视图中最后一个项目的颜色,这很好,它工作正常,但是当我向后滚动时,列表视图的第一个项目也发生了变化,我不知道为什么会这样正在发生,这是我的代码:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View vi = convertView;
final ViewHolder holder;
if (inflater == null)
inflater = (LayoutInflater) activity
.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
if (convertView == null) {
vi = inflater.inflate(R.layout.list_row_user, null);
holder = new ViewHolder();
holder.title = (TextView) vi.findViewById(R.id.text1);
holder.icon = (ImageView) vi.findViewById(R.id.icon);
vi.setTag(holder);
} else {
holder = (ViewHolder) vi.getTag();
}
holder.title.setText(lista[position]);
if (position == lista.length -1) {
holder.icon.setVisibility(View.VISIBLE);
holder.title.setTextColor(0xFF999999);
holder.title.setPadding(0, 20, 0, 0);
}
return vi;
}
public class ViewHolder {
TextView title;
ImageView icon;
}
您还必须像下面一样添加 else 部分
if (position == lista.length -1) {
holder.icon.setVisibility(View.VISIBLE);
holder.title.setTextColor(0xFF999999);
holder.title.setPadding(0, 20, 0, 0);
}else{
holder.title.setTextColor(otherColor);
}
发生这种情况的原因是列表项被回收,即,当您滚动浏览列表时,出于性能原因重复使用相同的项目对象(convertView != null 意味着之前膨胀和装饰的项目被重新-已使用并传递给您进行重新装修)。
这反过来意味着您不应依赖项目的任何默认属性,而应显式设置可能被任何其他项目更改的所有属性,如