StaggeredGridView布局通胀问题

时间:2013-12-05 12:55:45

标签: android android-layout gridview

我正在使用StaggeredGridView目前正在进行的项目中。但正在发生的事情是 GridView 布局没有以正确的方式膨胀。当我的布局被加载时, GridView 正在我的平板电脑(10“Sony Xperia Z)中以横向模式渲染4列,但有时在任何随机行号的某处,这些项目不是按顺序渲染但是在任何具有不均匀空隙空间的随机位置,如下图所示:

staggere_img1

当平板电脑处于纵向模式时,会出现相同类型的情况。但令人惊讶的是,当方向发生变化时,此问题将自动得到解决。这是我现在面临的一种奇怪的问题。我经历了一些研究,但没有运气。

我也尝试了This StaggeredGridView,但同样的问题。

有人可以帮助我吗?提前谢谢。

仅供参考我在 Gridview Adapter 中使用 Viewholder 模式。

PS:

修复 Fixed whitespace 与我的担忧有关吗?我已经尝试过但没有改进。

2 个答案:

答案 0 :(得分:2)

在通过picasso从网络加载图片时,我在StaggeredGridView中遇到了同样的问题。

使用时:

Picasso.with(mContext).load(getItem(position)).into(holder.imageView);

在你的适配器中,毕加索为你的图像保留一个网格,而SGV为内容保留渲染。然后最后加载图像,SGV再渲染一次,图像改变它们在SGV中的位置。

解决方案:我检查渲染所需图像的大小(我的情况是我从json读取的),以便在开始时为图像保留苛刻的空间。请看一下示例:

public class StaggeredAdapter extends ArrayAdapter<String> {

private Context mContext;

public StaggeredAdapter(Context context, int textViewResourceId,
                        String[] objects) {
    super(context, textViewResourceId, objects);
    mContext = context;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder holder;

    if (convertView == null) {
        LayoutInflater layoutInflator = LayoutInflater.from(getContext());
        convertView = layoutInflator.inflate(R.layout.row_staggered_demo, null);

        holder = new ViewHolder();
        holder.imageView = (ImageView) convertView .findViewById(R.id.imageView1);
        convertView.setTag(holder);
    }

    holder = (ViewHolder) convertView.getTag();

    // Calculate size of the element.
    int height = (position % 3 == 0) ? 600 : (1200 / (position % 3));
    convertView.setLayoutParams(new RelativeLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, height));

    Picasso.with(mContext).load(getItem(position)).into(holder.imageView);

    return convertView;
}

static class ViewHolder {
    ImageView imageView;
}

}

答案 1 :(得分:0)

可能是由项目布局引起的。它包含图像吗?物品膨胀时,它们可能有不同的尺寸。因此,使用不同的项目大小计算布局过程。尝试使用在图像加载之前使用的存根图像。