为什么 ListView 总是重新加载
why ListView always reload on
我使用 ListView 显示 30 种产品的列表。
protected class ListProductAdapter extends ArrayAdapter<Product>
implements View.OnClickListener {
...
@Override
public View getView(int position, View convertView, ViewGroup parent) {
我注意到当我显示activity时,它首先调用getView 6次,然后如果我向下滚动,会调用getView来显示其他产品,但是如果再向上滚动,会调用getView再次在已经调用 getView 的产品上。是否可以将其保存在内存中而不必重新计算上下滚动的所有内容?
ListView 精确地回收它的视图,因此您不必一直为内存中的每个项目创建一个视图,但它会将一个旧视图作为 convertView 传递,因此它可以重复使用,而不必重新-每次都充气。参见 here。
这就是 ListView
的工作原理。它管理多个视图,并在需要设置一个视图时调用 getView(int, View, ViewGroup)
。但是,它并不适用于很多观点。您也许可以将所有内容保存在内存中,但这不是它的意图。
如果 convertView
是 null
,列表需要您创建视图(您对 getView
的前 6 次调用)。当您开始滚动时,该列表将为您提供一个(已初始化)convertView
,您只需重新填充要显示的数据即可。
我使用 ListView 显示 30 种产品的列表。
protected class ListProductAdapter extends ArrayAdapter<Product>
implements View.OnClickListener {
...
@Override
public View getView(int position, View convertView, ViewGroup parent) {
我注意到当我显示activity时,它首先调用getView 6次,然后如果我向下滚动,会调用getView来显示其他产品,但是如果再向上滚动,会调用getView再次在已经调用 getView 的产品上。是否可以将其保存在内存中而不必重新计算上下滚动的所有内容?
ListView 精确地回收它的视图,因此您不必一直为内存中的每个项目创建一个视图,但它会将一个旧视图作为 convertView 传递,因此它可以重复使用,而不必重新-每次都充气。参见 here。
这就是 ListView
的工作原理。它管理多个视图,并在需要设置一个视图时调用 getView(int, View, ViewGroup)
。但是,它并不适用于很多观点。您也许可以将所有内容保存在内存中,但这不是它的意图。
如果 convertView
是 null
,列表需要您创建视图(您对 getView
的前 6 次调用)。当您开始滚动时,该列表将为您提供一个(已初始化)convertView
,您只需重新填充要显示的数据即可。