我为 Android 编写了一个自定义 ListView 适配器来更改数据的视觉方面。当我加载我的 ListView 时,所需项目的外观发生了变化。当我滚动视图时,其他项目将随机更改,直到最终列表中的每个项目都修改了其外观。
根据我在 SO 上阅读的有关此类代码的内容,我知道position
in 中的字段
public View getView(int position, View convertView, ViewGroup parent)
不一定映射到我的数据结构,因为 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;
}
我需要修改的项目是静态的,所以如果有比在运行时更改它们更好的方法,那也可以!任何帮助将不胜感激,谢谢。