我有一个ListView适配器,可以将自定义类放入listview。自定义类很简单,它是一个NameValue,只有两个字符串(一个用于名称,另一个用于值)。如果名称是Key,我想为行使用一个XML布局;如果是其他任何内容,请使用其他XML布局。这是我的适配器的代码:
private class ApInfoAdapter extends ArrayAdapter<NameValue> {
private ArrayList<NameValue> adapterPairs;
public ApInfoAdapter(Context context, int textViewResourceId,
ArrayList<NameValue> pairs) {
super(context, textViewResourceId, pairs);
this.adapterPairs = pairs;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
adapterPair = adapterPairs.get(position);
if (v == null) {
LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
if (adapterPair.name.equals("Key")) {
v = vi.inflate(R.layout.info_row_key, null); // This makes the key red
} else {
v = vi.inflate(R.layout.info_row, null); // All others have use the default foreground color
}
}
if (adapterPair != null) {
TextView name = (TextView) v.findViewById(R.id.name);
TextView value = (TextView) v.findViewById(R.id.value);
name.setText(adapterPair.name);
value.setText(adapterPair.value);
}
return v;
}
}
问题在于,有时它会为名称为“Key”红色的行创建值,但有时会使其他行的值变为红色(有时是一行,有时是多行)。当颜色关闭时,我注意到当我向上和向下滚动ListView时,其他行也会被错误地着色。我也注意到我的三星Galaxy S2上的问题比我的Nexus 7 Razor更糟。我对专家的问题是:我做错了什么,我该如何解决?感谢您的见解。
答案 0 :(得分:1)
如果v
不是null
,则应手动设置背景,因为它可以是View
,而不仅仅是{{1}}。