android ListView的虚拟大小?

时间:2011-02-16 12:18:45

标签: android listview

是否可以为Android中的ListView定义“虚拟大小”,从而让它分配更多视图并在屏幕上显示之前更早获取这些视图?例如,如果我的listview是400px高,而我的项目是100px高,listview将分配~5项视图并在列表滚动时重复使用这些视图。是否可以为listview(屏幕外)定义虚拟头部和尾部大小,以便此空间中的项目是getView()'ed?

我的问题:我有一个列表,其中的每个项目都包含从存储中读取异步的照片(SD卡)。这需要在项目准备好时具有一定的延迟。当我扔掉列表时,正在加载一些顶部/底部(向下/向上)数量的新项目。系统可以跟上=>吞吐量还可以,但读取延迟是个问题。如果listview可能有一些滚动的额外屏幕外项目,这可能会解决我的问题。

任何输入?

2 个答案:

答案 0 :(得分:1)

我有一个类似的问题(将图像异步加载到GridView中),我通过覆盖GridView子类中的onMeasure()来解决这个问题。 ListView具有same method。我的代码看起来像这样:

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    super.onMeasure(widthMeasureSpec, heightMeasureSpec);
    setMeasuredDimension(getMeasuredWidth(), getMeasuredHeight() + 500);
}

据我了解,这将使视图认为它比屏幕上的实际大,导致它保持更多的屏幕外视图而不是回收它们。您可以将500更改为任何大小,以便为您的应用程序预加载足够的图像。

不幸的是,我发现向上滚动(仅向下)时这不起作用。我无法弄清楚为什么会这样。

答案 1 :(得分:0)

为什么不在AsyncTask中加载图像Arraylist而不是延迟加载? 此外,您应该考虑使用此处所示的ViewHolder来提高适配器效率:http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/List14.html