2

如果我想标记第二个项目,我正在执行以下代码:此代码来自我的扩展 ArrayAdapter 的适配器:

if (convertView == null) {
        LayoutInflater mInflater = (LayoutInflater)getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = mInflater.inflate(R.layout.channel_list, null);
    } 

    MyContent o = items.get(position);
    if (o != null) {
        TextView tt = (TextView) convertView.findViewById(R.id.toptext);
        TextView bt = (TextView) convertView.findViewById(R.id.bottomtext);
        if (tt != null) {
            tt.setText(o.Top());                            
        }
        if(bt != null){
            bt.setText(o.Bottom());
        }
        if(position == 2) {
            convertView.setBackgroundColor(R.color.selectem_color);
        }
    }
    return convertView;

它将显示列表视图,但在此项目之后标记每个第 9 项(第 11 项第 13 项,依此类推)。

有谁知道是什么原因?

4

2 回答 2

3

您没有重置背景颜色。请记住,行被回收——这就是convertView它的用途。只需添加一个else {}以将颜色设置为您的正常状态,当position不是2时,您会没事的。

于 2010-05-30T18:42:15.357 回答
2

有两种情况可以调用 getView 方法。如果 converView 为空,则必须创建一个新视图。如果它不为空,则由于用户滚动而离开屏幕的项目将被回收并返回到您的方法以供重用。

该对象是之前在列表中显示的对象。您必须检查其状态并将其每个属性设置为您希望它具有的值。您不能表现得像对象是新的那样被标记而不是被标记的对象回来。在您的 getview 方法中执行类似的操作。

if(item is selected) {    
    convertView.setBackgroundColor(selected color);
} else {
    convertView.setBackgroundColor(not selected color);
}

在您的代码中,缺少 if 的 else 情况。

于 2010-05-31T07:25:24.057 回答