You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么RecyclerView.ViewHolder子类构造方法需要调用super(view)?

RecyclerView.ViewHolder构造调用super(view)的原因

你理解的没错,super(view)就是用来调用父类RecyclerView.ViewHolder的构造方法,这么做既有Java语法的强制要求,也和RecyclerView的核心运行逻辑强相关,具体原因如下:

  • Java继承语法的硬性要求
    RecyclerView.ViewHolder仅提供了唯一一个接收View类型参数的构造方法,没有无参构造方法。按照Java的继承规则,子类构造方法如果没有显式调用父类构造,会默认调用父类的无参构造,父类不存在无参构造时就会编译报错,所以你必须在自定义ViewHolder构造的第一行显式调用super(view)。
  • 支撑RecyclerView的核心运行逻辑
    父类ViewHolder的构造方法会把你传入的View对象保存为公开的itemView成员变量,整个RecyclerView的运作都依赖这个变量:
    • 列表的item复用、滚动渲染、点击事件绑定、item动画执行等内置逻辑,都是RecyclerView直接访问ViewHolder.itemView来完成的,你不把根View传给父类的话,RecyclerView无法获取到item的布局实例,整个列表功能会直接失效
    • 日常开发中我们也可以直接调用ViewHolder.itemView访问item的根布局,不需要自己额外声明变量存储,也是父类构造完成存储的功劳

官方示例的完整代码如下:

public static class ViewHolder extends RecyclerView.ViewHolder {
        private final TextView textView;

        public ViewHolder(View view) {
            super(view);
            textView = (TextView) view.findViewById(R.id.textView);
        }

        public TextView getTextView() {
            return textView;
        }
    }

内容的提问来源于stack exchange,提问作者BigChungus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 18:18:05