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

Android Studio中RecyclerView ViewHolder内findViewById无法解析方法错误求助

问题原因及解决方法

你遇到的findViewById cannot resolve method错误其实很好解决,问题就出在这一行代码上:

stateImage=(ImageView)findViewById(R.id.imageView);

为什么会触发这个错误?

ViewHolder类本身并没有findViewById()方法,这个方法是View类的成员方法。你初始化stateName的时候其实已经做对了——通过itemView.findViewById()来查找控件,因为itemView是RecyclerView列表项的根View,所有子控件都必须通过它来查找。而stateImage这一行你直接调用了findViewById(),编译器找不到这个方法,自然就报错了。

修正后的完整代码

只需要把stateImage的初始化代码改成和stateName一样的写法,通过itemView来调用findViewById()就可以了:

public class ViewHolder extends RecyclerView.ViewHolder{
 TextView stateName;
 ImageView stateImage;
 public ViewHolder(@NonNull View itemView) {
 super(itemView);
 itemView.setOnClickListener(new View.OnClickListener() {
 @Override
 public void onClick(View v) {
 Intent i=new Intent(v.getContext(),Details.class);
 i.putExtra("titleOfState",stitles[getAdapterPosition()]);
 i.putExtra("contentOfState",scontents[getAdapterPosition()]);
 v.getContext().startActivity(i);
 }
 });
 stateName=itemView.findViewById(R.id.stateName);
 // 这里是修正后的代码
 stateImage=itemView.findViewById(R.id.imageView);
 }
}

顺带提一句:从Android 8.0(API 26)开始,findViewById()会自动返回对应类型的View,所以你可以去掉(ImageView)的强制类型转换,代码会更简洁。

额外小建议

如果你的项目已经适配了ViewBinding或者DataBinding,完全可以用它们来替代findViewById(),不仅能彻底避免这类查找控件的错误,还能让代码类型更安全、写法更简洁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 22:48:10