解决方法是给内部的 RecyclerView 设置静态高度。
具体的实现步骤如下:
包裹父 RecyclerView 的 LayoutManager 应该使用 LinearLayoutManager。
确定子 RecyclerView 的 item 的高度。
然后通过 RecyclerView.setHasFixedSize(true)
方法设置子 RecyclerView 的高度。
为父 RecyclerView 的 Adapter 增加 getItemViewType
方法来为每个 index 的 item 返回不同的 viewType。
下面是具体的代码实现:
val layoutManager = LinearLayoutManager(this)
recyclerView.layoutManager = layoutManager
val itemHeight = resources.getDimensionPixelSize(R.dimen.item_height) // item 高度
val nestedRecyclerView = holder.findViewById(R.id.nested_recycler_view)
val params = nestedRecyclerView.layoutParams
params.height = itemHeight * itemCount // 子 RecyclerView 的高度为 itemHeight * 子 item 数量
nestedRecyclerView.layoutParams = params
nestedRecyclerView.setHasFixedSize(true)
getItemViewType
方法override fun getItemViewType(position: Int): Int {
return if (position == 1) VIEW_TYPE_FLEXBOX else VIEW_TYPE_LINEAR
}
上一篇:Android嵌套RecyclerView与LinearLayoutManager和FlexboxLayoutManager无法正常工作
下一篇:Android嵌套使用LinearLayoutManager和FlexboxLayoutManager的RecyclerView无法正常工作