【问题标题】:Custom ListView Adapter to change certain items自定义 ListView 适配器以更改某些项目
【发布时间】: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


【解决方案1】:

您的布局正在被 android 重用,这就是您获得此输出的原因。您需要做的是拥有一个类,该类将充当每个视图的静态视图,并将其用作标签。参见 @ 987654321@供参考

【讨论】:

  • 呃......我的编辑超时......文森特,谢谢,我尝试了这种模式,但仍然遇到问题。用新的 getView 更新了我的帖子
【解决方案2】:

您没有修改现有视图。如果 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;

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多