我遇到了 ListActivity 的问题。我扩展了 ArrayAdapter 和 Overridden getView 来填充每一行的数据。我将适配器的 ArrayList 中的一些数据放入 TextView。
我的问题是,当我滚动时,每行的 TextView 都会填充不在 ArrayList 中相应数据中的文本。我的意思是:假设我的列表顶部有一排 TextView 填充了空字符串。如果我在列表的底部并看到一行 TextView 填充了“bob”并且我轻拂以滚动到顶部,则顶部的行现在可能在其 TextView 中有“bob”,但数据位于我的 ArrayList 的索引不包含“bob”。它包含空字符串(实际上为空)。如果我继续上下滚动,其他行将填充(或擦除)与适配器的 ArrayList 中的内容不对应的数据。
要导致这种情况发生,我不需要快速滚动 ListView。然而,看起来我滚动得越快,越多的行变得混乱。
这是我的代码。我意识到每次调用 getView 时我都在使用 findViewById,但这不是重点。我反对convertView;所以它应该在每一行上获取正确的 TextView,是吗?
@Override
public View getView(int position, View convertView, ViewGroup parent) {
// get the View for this list item
View v = convertView;
if (v == null) {
LayoutInflater vi = (LayoutInflater)getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
v = vi.inflate(R.layout.layout_mylistlist_item, null);
}
// get the next object
MyListItem myItem = m_items.get(position);
// set up the list item
if (myItem != null) {
TextView txtName = (TextView) v.findViewById(R.id.mylist_name);
// set text
if (txtName != null && myItem.getName() != null) {
txtName.setText(myItem.getName());
}
}
// return the created view
return v;
}