当向上滚动时,StaggeredGridLayout 出现混乱

8
我为我的RecyclerView制作了这个StaggeredGridLayout在此输入图片描述 以下是代码:
 @Override
public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, final int position) {

    Photo photo = mPhotos.get(position);

    TextView titleView = ((CellViewHolder) viewHolder).titleTextView;
        titleView.setText(photo.getTitle());

    TextView subTitleView = ((CellViewHolder) viewHolder).subtitleTextView;
        subTitleView.setText(photo.getName());

    Picasso.with(mContext).load(photo.getPhotoUrl()).into(((CellViewHolder) viewHolder).imageView);

    ImageView userImageOverlay = ((CellViewHolder) viewHolder).userImageOverlay;

    StaggeredGridLayoutManager.LayoutParams layoutParams = (StaggeredGridLayoutManager.LayoutParams) viewHolder.itemView.getLayoutParams();

    if (position == 0 || position % 4 == 0) {
        layoutParams.setFullSpan(true);
        layoutParams.height = Math.round(Utils.convertDpToPixel(202.67f, mContext));
        titleView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 21.67f);
        subTitleView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 12.00f);
        userImageOverlay.setVisibility(View.VISIBLE);
    } else if ((position - 1) % 4 == 0) {
        layoutParams.setFullSpan(false);
        layoutParams.height = Math.round(Utils.convertDpToPixel(360.00f, mContext));
        titleView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 15.00f);
        subTitleView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 10.00f);
        userImageOverlay.setVisibility(View.GONE);
    } else {
        layoutParams.setFullSpan(false);
        layoutParams.height = Math.round(Utils.convertDpToPixel(180.00f, mContext));
        titleView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 15.00f);
        subTitleView.setTextSize(TypedValue.COMPLEX_UNIT_SP, 10.00f);
        userImageOverlay.setVisibility(View.GONE);
    }
}

除了向上滚动时,一切都正常工作。它按位置降序绘制单元格,但在网格中留下空白空间。

enter image description here

有什么想法可以让滚动时保持相同的模式吗?
2个回答

4

1
你需要设置间隙策略
mLayoutMang.setGapStrategy(StaggeredGridLayoutManager.GAP_HANDLING_MOVE_ITEMS_BETWEEN_SPANS);

"

GAP_HANDLING_MOVE_ITEMS_BETWEEN_SPANS会在滚动状态变为闲置时更新布局。

"

我在设置RecyclerView的布局管理器之前设置了GapStrategy,但是没有任何效果。仍然是一样的。 - Roo
@Roo 嗯,我不确定在RecyclerView中动态调整项目大小是否被推荐,但我可能是错的。 - tyczj
@Roo也许可以考虑不要动态改变单元格的高度,而是让单元格内有两个ImageView,并在满足条件(position - 1) % 4 == 0时隐藏其中一个,或者在该位置上填充另一个视图。 - tyczj
请查看此答案:https://dev59.com/h4Xca4cB1Zd3GeqPCxCg - tyczj

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接