Listview中的毕加索和持有人,可变高度

时间:2015-11-20 10:10:09

标签: android listview adapter picasso android-viewholder

我正在使用listView,其中我的项目使用以下xml:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">


    <com.makeramen.roundedimageview.RoundedImageView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/background_imageView" />


    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <!-- Content -->
    </LinearLayout>

</FrameLayout>

适配器

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    Cell cell;

    if (convertView == null) {
        convertView = _inflater.inflate(R.layout.mylayout, null);
        cell = new Cell(convertView);
        convertView.setTag(cell);
    } else {
        cell = (Cell) convertView.getTag();
    }

    // ... Some stuff with other views ...
    Picasso.with(_context).load("http://...").fit().centerCrop().into(cell.backgroundImageView);

    return convertView;
}

static class Cell {
    @Bind(R.id.background_imageView) ImageView backgroundImageView;
    // Other views

    public Cell(View view){
        ButterKnife.bind(this, view);
    }
}

这是滚动时的结果:

enter image description here

看起来Picasso正在使用旧Holder.imageView的高度调整图像大小。 当我不使用Holders时,我没有这个问题。

你有什么想法吗?

1 个答案:

答案 0 :(得分:1)

看起来将Picasso调用包装到document.write()中可以完成工作:

cell.backgroundImageView.post()

一旦视图被渲染/调整大小就会调用Picasso,并且可以将正确的度量应用于imageView。