Android开发求助:HomeFragment中嵌套RecyclerView无法显示
垂直嵌套水平RecyclerView不显示的解决办法
1. 先盯紧布局高度
- 水平RecyclerView的布局高度别用
wrap_content,早期RecyclerView对这个属性支持有坑,直接给个固定高度(比如160dp),或者让它填充满父布局的可用空间。 - 垂直RecyclerView本身的高度要设对,别用
wrap_content导致没撑开,直接给match_parent或者足够的显示空间。另外检查顶部图片区域有没有占满整个屏幕,把下面的RecyclerView挤出去了。
2. 适配器绑定不能漏步骤
- 确认传给HomeAdapter的数据源不是空的,每个Home对象里的Product列表得有实际数据,空列表当然显示不出来。
- 在HomeAdapter的
onBindViewHolder里,必须给水平RecyclerView同时设置布局管理器和适配器,少一个都不行:@Override public void onBindViewHolder(HomeViewHolder holder, int pos) { Home item = mDataList.get(pos); // 必须设置水平方向的布局管理器 LinearLayoutManager layoutManager = new LinearLayoutManager(holder.itemView.getContext(), LinearLayoutManager.HORIZONTAL, false); holder.horizontalRv.setLayoutManager(layoutManager); // 绑定子列表适配器 ProductAdapter subAdapter = new ProductAdapter(item.getProducts()); holder.horizontalRv.setAdapter(subAdapter); // 可选:开启固定大小提升渲染性能 holder.horizontalRv.setHasFixedSize(true); }
3. 垂直RecyclerView的初始化要到位
- 在HomeFragment里,确保垂直RecyclerView的初始化步骤完整:
RecyclerView verticalRv = view.findViewById(R.id.home_vertical_rv); verticalRv.setLayoutManager(new LinearLayoutManager(getContext())); HomeAdapter homeAdapter = new HomeAdapter(yourHomeDataList); verticalRv.setAdapter(homeAdapter); - 如果是异步加载数据,加载完成后一定要调用
homeAdapter.notifyDataSetChanged()刷新适配器,不然RecyclerView不知道有数据要渲染。
4. 排查滚动冲突问题
- 可以试试给水平RecyclerView关闭嵌套滚动:
holder.horizontalRv.setNestedScrollingEnabled(false);,有时候滚动冲突会导致内容不渲染。
5. 检查布局层级
- 确认垂直RecyclerView的
visibility是VISIBLE,没被其他View(比如顶部图片)覆盖,父布局也别设成GONE。
内容的提问来源于stack exchange,提问作者Alukusukuku
相关产品推荐
相关产品推荐

