EfficientAdapter和文本格式

时间:2011-03-28 15:02:10

标签: android listactivity

我正在使用扩展ListActivity的EfficientAdapter。 出于某种原因,当我使用代码时:

  public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder;
        if (convertView == null) {
            convertView = mInflater.inflate(R.layout.list_item_icon_text, null);
            holder = new ViewHolder();
            holder.text = (TextView) convertView.findViewById(R.id.text);
            holder.text.setPadding((int) (Vars.screenWid-300), 30, 0, 30);
            if (position==1){
                holder.text.setPadding(20, 0, 20, 0);
                holder.text.setBackgroundColor(Color.DKGRAY);
            }else{
                holder.text.setPadding(20, 20, 20, 20);
                 holder.text.setBackgroundColor(Color.TRANSPARENT);
            }
        }
            convertView.setTag(holder);
        } else {
            holder = (ViewHolder) convertView.getTag();
        }
        holder.text.setText(String.valueOf(Vars.DATAMIN[position]));
        return convertView;
    }

我得到了列表,但不是只有带有Color.DKGRAY的第1项,我在其他项目上得到了RANDOMALLY。我向上和向下滚动,看到从一个项目到另一个项目的背景变化。 任何想法?

1 个答案:

答案 0 :(得分:1)

视图被回收(意味着您要设置将在1以外的位置显示的视图的颜色),这样才能使其正常工作,您需要将代码移动到您更改填充和颜色的位置位置在convertView == null区块之外。

if (convertView == null) {
    convertView = mInflater.inflate(R.layout.list_item_icon_text, null);
    holder = new ViewHolder();
    holder.text = (TextView) convertView.findViewById(R.id.text);
    holder.text.setPadding((int) (Vars.screenWid-300), 30, 0, 30);
    convertView.setTag(holder);
} else {
    holder = (ViewHolder) convertView.getTag();
}
if (position==1){
    holder.text.setPadding(20, 0, 20, 0);
    holder.text.setBackgroundColor(Color.DKGRAY);
}else{
    holder.text.setPadding(20, 20, 20, 20);
    holder.text.setBackgroundColor(Color.TRANSPARENT);
}
holder.text.setText(String.valueOf(Vars.DATAMIN[position]));