横向RecyclerView嵌套两个纵向RecyclerView时onBindViewHolder如何实现
解决方案
核心实现逻辑
你只需要在横向RecyclerView的onBindViewHolder方法中,为两个子纵向RecyclerView分别配置纵向布局管理器、绑定对应适配器、传入当前条目封装的数据集即可,代码如下:
@Override public void onBindViewHolder(@NonNull ViewHolder holder, int position) { // 获取当前横向条目对应的混合数据模型 Question_Model_Mix currentItem = questionList.get(position); Context context = holder.itemView.getContext(); // 配置左侧纵向RecyclerView holder.recyclerView1.setLayoutManager(new LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false)); Mixandmatchadapter_left leftAdapter = new Mixandmatchadapter_left(currentItem.getDatalist_left(), context); holder.recyclerView1.setAdapter(leftAdapter); // 配置右侧纵向RecyclerView holder.recyclerView2.setLayoutManager(new LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false)); mixandmatchadapter rightAdapter = new mixandmatchadapter(currentItem.getDatalist(), context); holder.recyclerView2.setAdapter(rightAdapter); }
你需要确保Question_Model_Mix类已经实现了对应数据集的getter方法,参考类结构如下:
public class Question_Model_Mix { private ArrayList<Mixmatchclass> datalist; private ArrayList<Mixandmatchclass_left> datalist_left; public Question_Model_Mix(ArrayList<Mixmatchclass> datalist, ArrayList<Mixandmatchclass_left> datalist_left) { this.datalist = datalist; this.datalist_left = datalist_left; } public ArrayList<Mixmatchclass> getDatalist() { return datalist; } public ArrayList<Mixandmatchclass_left> getDatalist_left() { return datalist_left; } }
可选优化点
- 横向RecyclerView条目复用频繁的场景下,可以给子RecyclerView添加
holder.recyclerView1.setHasFixedSize(true)配置,避免重复测量视图大小,提升渲染性能 - 如果需要禁止子纵向RecyclerView的滑动,只保留横向RecyclerView的滑动能力,可以给子RecyclerView设置
holder.recyclerView1.setNestedScrollingEnabled(false)
内容的提问来源于stack exchange,提问作者Priyanshu Pundhir
相关产品推荐
相关产品推荐

