我正在尝试使用convertView实现ViewHolder模式。两个问题:
1)当我评论第1行和第2行(模式所需的)时,一切正常。当if到位时,所有内容都会被扰乱,列表的第一个元素会显示两次(在列表的开头和结尾),并且在某些方向更改和列表滚动后,所有内容都会混乱。为什么会这样?
2)我正在使用ListActivity并为ArrayAdapter提供TextView和字符串数组(#3)但由于某种原因我还需要行(#4),否则列表项是空白的。这是因为我没有使用super.getView()?
class SushiAdapter extends ArrayAdapter<String> {
private final Activity context;
SushiAdapter(Activity context) {
super(context, R.layout.row, R.id.label, MenuItems); // #3
this.context = context;
}
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
if (row == null) { //#1
LayoutInflater inflater = context.getLayoutInflater();
row = inflater.inflate(R.layout.row, parent, false);
ViewHolder holder = new ViewHolder();
holder.icon = (ImageView) row.findViewById(R.id.icon);
holder.position = position;
holder.item = (TextView) row.findViewById(R.id.label);
row.setTag(holder);
} // #2
ViewHolder newHolder = (ViewHolder) row.getTag();
newHolder.item.setText(MenuItems[newHolder.position]); // #4
newHolder.icon.setImageResource(R.drawable.sushi);
return row;
}
}
答案 0 :(得分:0)
如果要创建阵列适配器的新实例,例如:
ArrayAdapter<T> sushiAdapter = new ArrayAdapter<T>(context, R.layout.row, R.id.label, MenuItems)
此实例已经拥有了自己的 getView 方法实现。所以很明显,在你的情况下,当覆盖getView时,你自己提供完整的实现,并承担用内容填充视图的所有责任。 因此,如果您想添加新内容,请先调用 super.getView()。
但在您的情况下,当您拥有图像+文本视图时,您需要扩展BaseAdapter并自行提供所有实现。 ArrayAdapter提供了简单的功能,扩展它并不常见。