【发布时间】:2012-04-26 02:13:39
【问题描述】:
我为 Android 编写了一个自定义 ListView 适配器来更改我的数据的视觉方面。当我加载我的 ListView 时,所需项目的外观发生了变化。当我滚动视图时,其他项目会随机变化,直到最终列表中的每个项目都修改了外观。
根据我在 SO 上阅读的有关此类代码的内容,我知道 public View getView(int position, View convertView, ViewGroup parent)
中的 position 字段
不一定映射到我的数据结构,因为 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;
}
我需要修改的项目是静态的,所以如果有比在运行时更改它们更好的方法,那也可以!任何帮助将不胜感激,谢谢。
【问题讨论】:
-
除了 tv01 之外,rowView 中是否有子视图?
-
请发布您的ViewHolder的代码,以便我们看到它的成员字段。
标签: android listview baseadapter