Я прочитал много похожих статей, но до сих пор не нашел ответа, как узнать, отображается или нет держатель вида в RecyclerView
с StaggeredGridLayoutManager
.
Положение:
У меня есть RecyclerView
, StaggeredGrid и я хочу сделать заполнение как
8 dp [left view] 8 dp [right view] 8 dp
Так как я не могу сделать это в XML, я должен добавить несколько полей -
Для левого обзора: левое поле 8dp, правое поле 4dp
Для правого обзора: левое поле 4dp, правое поле 8dp
Обычно представления размещаются так:
[0][1]
[2][3]
[4][5]
Самое простое решение - попытаться определить его по позиции:
override fun onBindViewHolder(ViewHolder holder, int position) {
...
val params = holder.cardView.layoutParams as FrameLayout.LayoutParams
if (position % 2 == 0) {
params.leftMargin = pxFromDp(context, 8f).toInt()
params.rightMargin = pxFromDp(context, 4f).toInt()
}
if (position % 2 == 1) {
params.rightMargin = pxFromDp(context, 8f).toInt()
params.leftMargin = pxFromDp(context, 4f).toInt()
}
params.bottomMargin = pxFromDp(context, 2f).toInt()
params.topMargin = pxFromDp(context, 6f).toInt()
holder.cardView.layoutParams = params
...
}
И это работает, но если вид 2 имеет меньшую высоту, чем вид 1, они помещаются
[0][1]
[3][2]
[5][4]
Так что не работает.
Как узнать, есть ли левый или правый держатель для просмотра?