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
相关产品推荐
相关产品推荐

