Android:ListView没有完全填充

时间:2011-03-16 16:32:41

标签: android listview populate

我正在尝试为我的应用程序构建一个RSS提要阅读器,我有一个奇怪的问题。为了实现这个feed我使用一个ListView,我从我定制的ArrayList填充。

我知道ArrayList已满了我要显示的所有字段(我在Logcat中打印所有这些字段),但是当我运行应用程序时,并不是我的ListView中的所有单元格都填充了它们所应用的信息到,它们的主要部分显示TextView。它似乎是随机的,但始终正常工作的是第一个元素。其他人有时会这样做。

另一个奇怪的事情是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;
}

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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;
}