#android #kotlin #android-recyclerview
Вопрос:
У меня есть простой RecyclerView, реализованный с помощью GridLayoutManager. Программа RecyclerView Adapater вычисляет высоту элементов внутри onCreatViewHolder. Я также использую пользовательский класс для установки равного расстояния между элементами.
Весь код используется для создания макета сетки с использованием recyclerview, где сетка точно соответствует высоте родительского контейнера. Каждый элемент имеет высоту parent_container/no_of_rows. Весь этот код отлично работает для количества строк 2 или меньше, но как только я устанавливаю количество строк равным 3, высота элементов не рассчитывается должным образом. Я получаю немного прокрутки, потому что она выходит за рамки обзора.
Сначала я подумал, что это происходит, потому что я устанавливаю изображение большего размера, чтобы вид исчез, но проблема все еще сохраняется, даже если я просто загружаю пустые элементы с нулевым содержимым.
onCreateViewHolder
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ContentViewHolder {
val view: View = LayoutInflater.from(parent.context).inflate(tileLayout, parent, false)
val height = (parent.measuredHeight - totalItemSpacing) / rowCount
view.layoutParams = RecyclerView.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, height)
return onItemClickListener?.let { ContentViewHolder(view, it) }!!
}
Вот как я пытаюсь реализовать свой recyclerview во фрагменте —
rvAdapter = context?.let { RVAdapter(it, 3, 64, R.layout.item, itemList) }
val mLayoutManager = GridLayoutManager(context, 2)
binding?.responseView?.adapter = rvAdapter
binding?.responseView?.layoutManager = mLayoutManager
binding?.responseView?.addItemDecoration(
SpacesItemDecoration(
2,
resources.getDimensionPixelSize(R.dimen.spacing),
false
)
)
Я также подумал, что getMeasuere height работает неправильно, потому что RecyclerView не создается, как только представление создается фрагментарно.