ReridlerView GridLayoutManager динамический счетчик диапазона
Я использую следующий код динамически изменить количество пролетов.
val layoutManager = GridLayoutManager(this, 3)
layoutManager.spanSizeLookup = object : GridLayoutManager.SpanSizeLookup() {
override fun getSpanSize(position: Int): Int {
when (position) {
0, 1, 2 -> return 1
3, 4 -> return 2
5 -> return 3
else -> return 1
}
}
}
И я получил следующий вывод. Но я хочу, чтобы D и E были горизонтально выровнены по горизонтали. Я не знаю, как это сделать.
На самом деле у меня есть 3 типа в адаптере , HEADER, TYPE_A, TYPE_B. У HEADER должна быть только одна строка, TYPE_A - 3 строки, TYPE_B - 2 строки.
Поэтому я могу получить помощь, чтобы у некоторых столбцов была одна строка, а у некоторых - только 2 строки (по горизонтали одинаково выровнены), а у некоторых - 3 строки.
3 ответа
В этом случае вы должны сделать вашу сетку более 3-х ячеек. Вам нужно будет выбрать число, которое подходит для всех трех типов ячеек, а 6 - это хорошо, потому что если иметь 3 ячейки по строке, вы должны вернуть 2. Чтобы иметь 2 ячейки по строке, вы должны вернуть 3 и иметь 1 ячейка за строкой вы бы вернули 6:
val layoutManager = GridLayoutManager(this, 6)
layoutManager.spanSizeLookup = object : GridLayoutManager.SpanSizeLookup() {
override fun getSpanSize(position: Int): Int {
when (position) {
0, 1, 2 -> return 2
3, 4 -> return 3
5 -> return 6
else -> return 2
}
}
}
Вот мое решение для динамического диапазона, в этом случае максимальный диапазон равен 4, а 12 кратно 4, 3 и 2. //ЧИСЛО ПРОМЕЖУТКА, КОТОРЫЙ ВЫ ХОТИТЕ, - это размер вашего массива
val mutipleSpan = 12 //least common multiple
val maxSpan = 4//max span count
val mLayoutManager = object : GridLayoutManager(itemView.context, mutipleSpan){}
mLayoutManager.spanSizeLookup = object : GridLayoutManager.SpanSizeLookup() {
override fun getSpanSize(position: Int): Int {
val actualSize = //NUMBER OF THE SPAN THAT YOU WANT
if(actualSize< maxSpan){
return mutipleSpan/actualSize
}
return mutipleSpan/maxSpan
}
}
recycler.layoutManager = mLayoutManager