ListView项目无法正确刷新

时间:2010-11-10 08:24:47

标签: android listview

我创建了一个自定义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;
}

2 个答案:

答案 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;
    }
}