为什么 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)。但是,它并不适用于很多观点。您也许可以将所有内容保存在内存中,但这不是它的意图。

如果 convertViewnull,列表需要您创建视图(您对 getView 的前 6 次调用)。当您开始滚动时,该列表将为您提供一个(已初始化)convertView,您只需重新填充要显示的数据即可。

详见 documentation of getView