为什么ListView总是在

时间:2015-08-30 20:36:14

标签: android listview android-listview android-arrayadapter

我使用ListView显示30个产品的列表。

protected class ListProductAdapter extends ArrayAdapter<Product> 
        implements View.OnClickListener {
    ...
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

我注意到当我显示活动时,它首先调用getView 6次,然后如果我向下滚动,将调用getView来显示其他产品,但是如果我向上滚动,则getView会再次调用getView的产品已被召唤。是不是可以把它记在内存中,而不必重新计算我向下滚动的所有内容?

2 个答案:

答案 0 :(得分:2)

ListView精确地回收其视图,因此您不必一直为内存中的每个项目都有一个View,但是它将旧视图作为convertView传递,因此可以重复使用它并且不必重新使用 - 每次都充气。请参阅here

答案 1 :(得分:1)

ListView的工作原理。它可以管理多个视图,并在需要设置一个视图时调用getView(int, View, ViewGroup)。尽管如此,它并不适用于许多观点。你可能能够记住所有内容,但这不是它的意图。

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

请参阅documentation of getView以获得详尽的解释。