2014-03-03 109 views
3

我使用ViewHolder安装程序和我的ListView,所以我确信它不是回收问题。ListView仅在第一次加载毕加索图像时滞后

ListView仅在图像首次加载时滞后,如果向后滚动,所有内容都很流畅。

我简化getView方法:

@Override 
public View getView(int position, View convertView, ViewGroup parent) { 
... 

    mPicasso.load(cData.get("url")).into(holder.imagePreviewView); 

... 
} 

我对ImageView的XML:

<ImageView 
    android:id="@+id/imagePreview" 
    android:layout_width="fill_parent" 
    android:layout_height="@dimen/image_preview_height" 
    android:scaleType="centerCrop" 
    android:background="?attr/postPreviewBground" /> 

谢谢!

+0

你把layout_height的listview设置为wrap_content。这可能会导致初始延迟 –

+0

我将它们设置为match_parent。 – vivatus

+0

延迟导致你在主线程上加载图像而不是非UI线程,从线程加载图像并初始化只有图像的位置持有者 –

回答

0

这很可能是系统正在执行一个GC_FOR_ALLOC来为您正在加载的位图分配内存。由于位图已经加载并缓存在内存中,因此它可以顺利滚动备份。

0

我很容易解决这个错误。你必须在getView()内部抛出一个线程,并在该线程内写入你拥有的代码。

试试这个,它的工作原理!

+0

我得到了'java.lang.IllegalStateException:方法调用应该发生在主线程中。在com.squareup.picasso.Utils.checkMain(Utils.java:136)' – jaynp