关于在自定义数组适配器的 getView 方法中回收 View ,我有一个不清楚的问题。
我知道元素会被重用,但我如何确切知道在 if 语句的第一部分要实现什么,在第二部分要实现什么?
现在我有以下代码。我之所以想到这个问题,是因为在语句的第二部分删除了代码,这导致了前 9 个元素的列表,这些元素被重复了无数次而不是所有元素。我真的不知道是什么原因造成的...
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View row = convertView;
if (row == null) {
LayoutInflater inflater = ((Activity) context).getLayoutInflater();
row = inflater.inflate(layoutResourceId, parent, false);
title = getItem(position).getTitle();
size = calculateFileSize(position);
txtTitle = (TextView) row.findViewById(R.id.txtTitle);
tvFileSize = (TextView) row.findViewById(R.id.tvFileSize);
txtTitle.setText(title);
tvFileSize.setText(size);
} else {
title = getItem(position).getTitle();
size = calculateFileSize(position);
txtTitle = (TextView) row.findViewById(R.id.txtTitle);
tvFileSize = (TextView) row.findViewById(R.id.tvFileSize);
txtTitle.setText(title);
tvFileSize.setText(size);
}
return row;
}
最佳答案
这很容易。第一次没有创建行,所以你必须膨胀它们。之后,Android 操作系统可能会决定回收您已经膨胀且不再可见的 View 。这些已经膨胀并传递到 convertView 参数中,因此您所要做的就是安排它显示新的当前项目,例如将正确的值放入各种文本字段中。
简而言之,在第一部分中,您应该执行膨胀并填充值,在第二部分中,如果 (if convertView != null
) 您应该只覆盖该字段,因为给定 View 具有已被回收,textviews 包含旧项目的值。
关于android - 在自定义数组适配器 : how exactly is it handled? 中回收 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15912999/