求助:java.lang.NullPointerException报错,itemView.findViewById不可为null
解决java.lang.NullPointerException: itemView.findViewById(R.id.img_movie) must not be null
常见原因及排查方向:
- 布局ID不匹配:检查RecyclerView子项布局文件里,ImageView的ID是不是严格等于
img_movie,注意拼写、大小写别出错,比如别写成img_movies或者Img_movie。 - ViewHolder初始化传入的View错误:确认Adapter的
onCreateViewHolder方法里,加载的是包含img_movie的子项布局,并且正确传入ViewHolder。比如:
这里要保证override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MainViewHolder { val view = LayoutInflater.from(parent.context).inflate(R.layout.item_movie, parent, false) return MainViewHolder(view) }R.layout.item_movie是正确的子项布局文件。 - 布局引用问题:如果子项布局用了
<include>标签,得确认被包含的布局里确实有img_movie这个ID,避免因重复ID或引用错误导致找不到控件。 - Kotlin合成属性冲突:如果项目启用了Kotlin Android Extensions,可能出现同名ID冲突,建议改用ViewBinding/DataBinding,或者暂时禁用该插件排查问题。
- 控件不存在于布局:仔细检查子项布局文件,确保
img_movie这个ImageView确实存在,没被误删或者注释掉。
快速排查小技巧:
在bind方法里加个简单的调试逻辑,确认控件是否存在:
fun bind(movies: Movie){ val image: ImageView? = itemView.findViewById(R.id.img_movie) if(image == null){ // 这里可以打日志或者用Toast提示 Log.e("ViewHolderError", "找不到img_movie控件") return } image.setImageResource(movies.urlCoverImg) }
也可以用Android Studio的Layout Inspector工具,查看运行时RecyclerView子项的布局结构,直观确认控件是否存在。
内容的提问来源于stack exchange,提问作者Bnteo Costa
相关产品推荐
相关产品推荐

