如何防止StaggeredGridLayout Manager重新排序RecyclerView项?

时间:2019-05-04 16:29:35

标签: android android-recyclerview android-gridlayout recyclerview-layout gridlayoutmanager

我想用2种不同的商品类型填充RecyclerView,

通过将BIG_ITEM与3列一起使用并将项类型指定为

,中间的列应仅包含SMALL_ITEM,其他列应具有GridLayoutManager

position % 3 == 1 -> BIG_ITEM else SMALL_ITEM

我可以实现这一点,但是问题是BIG_ITEM和SMALL_ITEM与行保持一致,所以SMALL_ITEM不能填补空白,我得到了这个视图 代替

[![在此处输入图片描述] [1]] [1]

我试图使用ItemDecoration在大小块之间指定一个恒定的间隙,但是它也不起作用。

如果我使用StaggeredGridLayout磁贴,可以缩小间隙,但是顺序会发生变化,因此中间不再有Big磁贴。

所以我的问题是如何实现这种观点? 4个小图块高度应等于3个大图块高度,大图块应位于中间。但是图块之间的边距应该相等

[![在此处输入图片描述] [2]] [2]

override fun getItemViewType(position: Int): Int {
        return if (position.rem(3) == 1) {
            BIG_VIEW
        } else {
            SMALL_VIEW
        }
    }

我尝试过的物品装饰:

class ItemOffsetDecoration(private val mItemOffset: Int) : RecyclerView.ItemDecoration() {

    constructor(@NonNull context: Context, @DimenRes itemOffsetId: Int) : this(context.resources.getDimensionPixelSize(itemOffsetId)) {}

    override fun getItemOffsets(
        outRect: Rect, view: View, parent: RecyclerView,
        state: RecyclerView.State
    ) {
        super.getItemOffsets(outRect, view, parent, state)
        outRect.set(mItemOffset, mItemOffset, mItemOffset, mItemOffset)
    }
}

大项目:

<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
   >


    <ImageView
        android:id="@+id/imageView_kids_item"
        android:layout_width="500dp"
        android:layout_height="266dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:srcCompat="@drawable/icon_no_image" />
</android.support.constraint.ConstraintLayout>

小物品:

<ImageView
    android:id="@+id/imageView_kids_item"
    android:layout_width="370dp"
    android:layout_height="200dp"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    app:srcCompat="@drawable/icon_no_image" />

0 个答案:

没有答案