android - 当行数大于 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。
解决方案
推荐阅读
- laravel - Laravel 8 对搜索结果进行排序和分页
- ios - 我将如何从不同的类中快速更改 UILabel 的值?
- vue.js - Vue.js 中类别的嵌套路由
- reactjs - Chartjs:制作方形图例
- laravel - Laravel 无法读取 vue 文件
- docker - Github Actions Container 未运行
- html - 卡住试图让这两列并排
- javascript - 页面刷新或仅新页面上的“未捕获的类型错误”...?
- javascript - UnhandledPromiseRejectionWarning:TypeError:无法读取未定义的属性“替换”
- java - 为什么 JPanel 大小不对?