首页 > 解决方案 > 当行数大于 2 时,无法正确计算 Recyclerview 行高

问题描述

我有使用 GridLayoutManager 实现的简单 recyclerView。RecyclerView 适配器正在计算 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 高度无法正常工作,因为在 Fragment 中创建视图后,不会立即创建 RecyclerView。

标签: androidkotlinandroid-recyclerview

解决方案


推荐阅读