Android 用于更改某些项目的自定义ListView适配器

Android 用于更改某些项目的自定义ListView适配器,android,listview,baseadapter,Android,Listview,Baseadapter,我已经为Android编写了一个自定义ListView适配器,用于更改数据的可视方面。当我加载ListView时,所需的项目的外观发生了更改。当我滚动视图时,其他项目将随机更改,直到列表中的每个项目的外观都被修改 从我对这类代码的了解中,我知道 公共视图getView(int位置、视图转换视图、视图组父视图) 不一定映射到我的数据结构,因为Android重复使用旧视图。这似乎是我正在努力处理的行为 使用Vincent建议的ViewHolder模式更新了getView方法: @Override p

我已经为Android编写了一个自定义ListView适配器,用于更改数据的可视方面。当我加载ListView时,所需的项目的外观发生了更改。当我滚动视图时,其他项目将随机更改,直到列表中的每个项目的外观都被修改

从我对这类代码的了解中,我知道
公共视图getView(int位置、视图转换视图、视图组父视图)

不一定映射到我的数据结构,因为Android重复使用旧视图。这似乎是我正在努力处理的行为

使用Vincent建议的ViewHolder模式更新了getView方法:

@Override
public View getView(int position, View convertView, ViewGroup parent)
{
    View rowView = convertView;
    if (rowView == null)
    {
        LayoutInflater inflater = LayoutInflater.from(context);
        rowView = inflater.inflate(R.layout.rowlayout, null);
        ViewHolder viewHolder = new ViewHolder();
        viewHolder.text = (TextView) rowView.findViewById(R.id.tv01);
        rowView.setTag(viewHolder);
    }

    ViewHolder holder = (ViewHolder) rowView.getTag();
    String s = names[position];
    holder.text.setText(s);
    if (s.startsWith("a"))
    {
        holder.text.setTextColor(0xff00ffff);
    }

    return rowView;
}

我需要修改的项目是静态的,所以如果有比在运行时修改更好的方法,那也可以!任何帮助都将不胜感激,谢谢。

android正在重用您的布局,这就是您获得此输出的原因。您需要做的是创建一个类,该类将充当每个视图的静态视图持有者,并将其用作标记。有关参考信息,请参阅。

您没有修改现有视图。如果convertView不为null,则意味着Android正在循环使用视图,而不是膨胀视图,但您仍然需要使用新值更新视图。类似这样的方法会奏效:

public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder;          

if(convertView == null) {
    convertView = mInflater.inflate(R.layout.rowlayout, null);
    holder = new ViewHolder();  
}
else {
    holder = (ViewHolder) convertView.getTag();
}
holder.title = (TextView) convertView.findViewById(R.id.tv01); 
convertView.setTag(holder);

return convertView;

}

Ugh。。我的编辑超时。。。文森特,谢谢,我试过这个模式,但仍然有问题。使用新的GetView更新了我的帖子rowView中是否有子视图,tv01除外?请发布您的视图持有者的代码,以便我们可以查看其成员字段。