2011-03-16 119 views
0

我想为我的应用程序构建一个RSS提要阅读器,并且我有一个奇怪的问题。为了实现这个提要,我使用了一个ListView,我从我自定义的ArrayList中填充。我知道ArrayList是完整的,我想要显示的所有字段(我将它们全部打印在Logcat中),但是当我运行该应用程序时,并非我ListView中的所有单元格都填充了它们的信息应该是,他们的主要部分显示TextView。这似乎是非常随机的,但始终正确工作的是第一个元素。其他人有时会这样做。Android:ListView没有完全填充

另一个奇怪的是,OnItemClickListener完美工作,即使我无法看到我的元素中的信息。

非常感谢您的高级。

我附上我getView代码:

public View getView(int position, View convertView, ViewGroup parent) { 
    View v = convertView; 
    AdapterWrapper wrapper; 
    if (v == null) { 
     LayoutInflater li = (LayoutInflater) this.getContext() 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     v = li.inflate(R.layout.itemrow, null); 
     wrapper = new AdapterWrapper(v, cont); 
     v.setTag(wrapper); 
    } else { 
     wrapper = (AdapterWrapper) convertView.getTag(); 
     RssItem o = this.getItem(position); 
     if (o != null) 
      wrapper.populateFrom(o); 
     parent.refreshDrawableState(); 
    } 
    return v; 
} 
+1

我们需要看代码。 – 2011-03-16 16:34:32

+0

当你说你“定制”一个ArrayList时,你是什么意思? – 2011-03-16 16:35:18

+0

对不起,我的意思是我扩展了一个ArrayAdapter – JoanG 2011-03-16 16:36:11

回答

0

可能是你没有正确getView处理回收的视图情况。

当你检查看到convertView != null时,你仍然需要在你的convertView中填充的信息。实际的视图层次结构将存在,但信息将来自旧的,与不同行相关的再循环视图。

欲了解更多具体信息,请发布您的getView代码。

编辑 - 我想你需要致电wrapper.populateFrom(o),不管你有没有convertView。尝试移动该部分的if语句之外:

if (v == null) { 
    LayoutInflater li = (LayoutInflater) this.getContext() 
      .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    v = li.inflate(R.layout.itemrow, null); 
    wrapper = new AdapterWrapper(v, cont); 
    v.setTag(wrapper); 
} else { 
    wrapper = (AdapterWrapper) convertView.getTag(); 
} 
RssItem o = this.getItem(position); 
if (o != null) 
    wrapper.populateFrom(o); 
parent.refreshDrawableState(); // not sure what this is doing 
+0

你走了,我发布了我的getView代码。 – JoanG 2011-03-16 16:41:54

+0

我得到了我的错误,我认为我可以做出的最愚蠢的事情是,{它不应该去那里。 – JoanG 2011-03-16 16:45:06

+0

你应该总是使用像我上面张贴的花括号,否则很容易犯这样的错误。 – 2011-03-16 16:49:14

0

我得到它的工作,我有一个{这是不应该的

其他

字后,所以代码最后是:

public View getView(int position, View convertView, ViewGroup parent) { 
    View v = convertView; 
    AdapterWrapper wrapper; 
    if (v == null) { 
     LayoutInflater li = (LayoutInflater) this.getContext() 
       .getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
     v = li.inflate(R.layout.itemrow, null); 
     wrapper = new AdapterWrapper(v, cont); 
     v.setTag(wrapper); 
    } else 
     wrapper = (AdapterWrapper) convertView.getTag(); 

    RssItem o = this.getItem(position); 
    if (o != null) 
     wrapper.populateFrom(o); 
    parent.refreshDrawableState(); 

    return v; 
}