我使用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的产品已被召唤。是不是可以把它记在内存中,而不必重新计算我向下滚动的所有内容?
答案 0 :(得分:2)
ListView精确地回收其视图,因此您不必一直为内存中的每个项目都有一个View,但是它将旧视图作为convertView传递,因此可以重复使用它并且不必重新使用 - 每次都充气。请参阅here。
答案 1 :(得分:1)
ListView
的工作原理。它可以管理多个视图,并在需要设置一个视图时调用getView(int, View, ViewGroup)
。尽管如此,它并不适用于许多观点。你可能能够记住所有内容,但这不是它的意图。
如果convertView
为null
,则列表需要您创建视图(您对getView
的前6次调用)。当您开始滚动时,列表将为您提供(已初始化的)convertView
,您只需要重新填充要显示的数据。
请参阅documentation of getView以获得详尽的解释。