RecyclerView设置每个页面出现指定数量的子item,并填充高度

该博客介绍如何在Android的RecyclerView中实现固定数量的视图,每个视图占据屏幕的三分之一高度。通过在Adapter的onCreateViewHolder方法中设置ViewHolder的高度,达到了无论手机型号大小,视频列表页面始终显示3个视频的效果。代码示例展示了具体的实现步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Android 显示实时系统时间

接到需求 要求视频列表页面内出现固定数量的N个(需求中是3个)视频,无论手机型号大小。实现这一需求需要在RecyclerView的Adapter中指定出现的viewHolder数量,并设置每个viewHolder所占据的高度,看代码:

 @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View inflate = LayoutInflater.from(context).inflate(R.layout.item_videolist, parent, false);
        VideoListAdapter.ViewHolder viewHolder = new VideoListAdapter.ViewHolder(inflate);
        int parentHeight = parent.getHeight();
        parent.getWidth();
        ViewGroup.LayoutParams layoutParams = viewHolder.itemView.getLayoutParams();
        layoutParams.height = (parentHeight / 3);
        return viewHolder;
    }

完美实现,效果对比:设置之前因为指定了item高度,页面显示的item数量是不可控的,根据屏幕参数自动显示
设置之后,无论item高度如何设定,都只会出现3个item

![如上图效果](https://img-blog.csdnimg.cn/20210602110320935.png

Android中,RecyclerView嵌套通常用于创建复杂的列表布局,其中内部的RecyclerView可以展示更详细的数据或者是另一个列表。当需要向RecyclerViewitem添加数据时,你需要通过设置Adapter来动态填充View。 以下是一个简单的步骤说明: 1. 首先,确保你的主RecyclerView有一个包含child items的布局视图,例如`androidx.recyclerview.widget.RecyclerView`中常用的`RecyclerView.ViewHolder`或自定义的ViewHolder类。 2. 创建一个自定义的ChildAdapter,它继承自`RecyclerView.Adapter`负责RecyclerView的数据和布局管理。每个item应该对应于`ChildAdapter.getItem(int position)`返回的一个单独的数据对象。 ```java public class ChildAdapter extends RecyclerView.Adapter<ChildAdapter.ChildViewHolder> { private List<ItemData> childItems; // 添加构造函数接收childItems列表,在适配器初始化时设置 public ChildAdapter(List<ItemData> childItems) { this.childItems = childItems; } @NonNull @Override public ChildViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { View itemView = LayoutInflater.from(parent.getContext()) .inflate(R.layout.item_child_layout, parent, false); return new ChildViewHolder(itemView); } @Override public void onBindViewHolder(@NonNull ChildViewHolder holder, int position) { ItemData item = childItems.get(position); // 设置Item的数据和事件处理 holder.bindToItem(item); } // 其他必要的方法,如getItemCount(), getItemCount()等 static class ChildViewHolder extends RecyclerView.ViewHolder { // 初始化绑定holder到item视图 public ChildViewHolder(View itemView) { super(itemView); // 初始化item视图的控件设置监听 } void bindToItem(ItemData item) { // 根据item更新ViewHolder中的视图内容 } } } ``` 3. 当主RecyclerView的数据发生变化,导致需要添加新的项时,可以在对应的adapter方法(如`notifyDataSetChanged()`)之前,增加对Adapter相应位置的数据填充,然后调用其`notifyDataSetChanged()`方法来通知视图更新。 4. 更新主数据源时,比如添加了一个新的项列表,你可以这样做: ```java // 假设mainList是主RecyclerView的数据源 List<List<ItemData>> mainListWithNewSubList = ...; // 新增项后的完整数据 // 更新项列表 mainList.get(position).addAll(newSubList); // 如果有新的项需要添加到所有位置 for (int i = 0; i < mainList.size(); i++) { if (!mainList.get(i).isEmpty()) { mainListWithNewSubList.set(i, mainList.get(i)); } else { mainListWithNewSubList.add(new ArrayList<>()); } } // 通知主适应器更新 mMainAdapter.notifyDataSetChanged(); ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值