Высота строк Recyclerview не рассчитывается должным образом, если ни одна из строк не превышает 2

#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 не создается, как только представление создается фрагментарно.