我正在尝试为我的应用程序构建一个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;
}
答案 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;
}