我创建了一个自定义ArrayAdapter,用于在数组中显示ListView项目中的数据 数据结构,出于某种原因,当我快速向上和向下滚动时,显示器会做出奇怪的事情。
这是我自定义ArrayAdapter的getView函数。我的第一个猜测是因为if(d.highTemp!= null)导致滞后或其他什么?我希望适配器做的只是在数据结构中包含值时才显示highTemp。否则它应该显示lowTemp值;最初绘制时列表是正确的,但如果我快速向上和向下滚动它将开始显示high和lowTemp值,即使我知道每个数据结构只有其中一个!= null ...
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View v = convertView;
if (v == null) {
LayoutInflater vi = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(R.layout.list_item, null);
}
DaysWeather d = daysWeather[position];
if (d != null) {
TextView tt = (TextView) v.findViewById(R.id.toptext);
TextView bt = (TextView) v.findViewById(R.id.bottomtext);
TextView trt = (TextView) v.findViewById(R.id.toprighttext);
TextView tbt = (TextView) v.findViewById(R.id.bottomrighttext);
if (tt != null) {
tt.setText(d.name);}
if(bt != null){
bt.setText(d.shortDescription);
}
if (d.highTemp != null){
if (trt != null) {
trt.setText("Hi: " + d.highTemp);
tbt = null;
}
} else {
if (tbt != null) {
trt = null;
tbt.setText("Lo: " + d.lowTemp);
}
}
}
return v;
}
答案 0 :(得分:1)
你试试游标适配器......它vl wrk更好......
答案 1 :(得分:0)
由于您正在重用任何给定行的视图,该行可能已经设置了Hi temp文本视图,因此您需要显式设置您不想要空字符串(或隐藏)的字段。
你需要做这样的事情:
if (d.highTemp != null) {
if (trt != null) {
trt.setText("Hi: " + d.highTemp);
tbt.setText(""); //set this field to blank
tbt = null;
}
} else {
if (tbt != null) {
tbt.setText("Lo: " + d.lowTemp);
trt.setText(""); //set this field to blank
trt = null;
}
}