我正在使用扩展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。我向上和向下滚动,看到从一个项目到另一个项目的背景变化。 任何想法?
答案 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]));