2011-02-16 80 views
2

是否有可能在Android中为ListView定义'虚拟大小',从而让它在屏幕上可见之前分配更多视图并提前获取这些视图?例如,如果我的listview是400px高,我的项目是100px高,listview将分配~5个项目视图,并重复使用这些列表滚动。是否有可能为listview(off-screen)定义一个虚拟的头部和尾部大小,使得这个空间中的项目是getView()?Android ListView的虚拟大小?

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

任何输入?

回答

1

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

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

按我的理解,这将使观点认为,这是大于它实际上是在屏幕上,使其保持更多的屏幕外的看法活着,而不是进行再利用。您可以将500更改为任何大小,以便为应用程序预载足够的图像。

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

0

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

+0

图像由2级缓存(内存+文件)支持,但因为我可能有1000多个项目,所以将它们全部加载到数组中不是一种选择。我的原始文章中描述的延迟问题发生在我有内存缓存未命中并且图像必须从sd卡加载时。 已经使用CursorAdapter(由sqlite支持的内容提供者提供的数据)+ ViewHolder模式。 – toucan 2011-02-16 12:31:37