0

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

我知道 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;
}
4

2 回答 2

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;
}
于 2011-03-16T16:47:22.467 回答
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
于 2011-03-16T16:36:11.043 回答