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

RecyclerView Adapter编译错误:无法找到UserName属性

解决RecyclerView Adapter中找不到UserName的编译错误

嘿,我一眼就看出问题所在啦——你遇到的编译错误是因为ViewHolder的类型不匹配,咱们来一步步修复:

问题根源

你的onBindViewHolder方法里,holder的类型是RecyclerView.ViewHolder(这是所有ViewHolder的父类),但这个父类并没有你自定义的UserName成员变量。而你实际在onCreateViewHolder里返回的是自己写的ViewHolder子类,所以必须把holder的类型换成你自定义的那个,才能访问到UserName。

另外,你的Adapter类泛型也写错了:你继承的是RecyclerView.Adapter<RecyclerView.ViewHolder>,应该改成RecyclerView.Adapter<Adapter.ViewHolder>,这样整个Adapter的泛型体系才能对应上,避免不必要的类型转换。

修正后的完整代码

package com.jakewalther.x; 

import android.content.Context; 
import android.support.annotation.NonNull; 
import android.support.v7.widget.RecyclerView; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.TextView; 
import java.util.List; 

// 建议类名首字母大写,遵循Java命名规范
public class Adapter extends RecyclerView.Adapter<Adapter.ViewHolder> { 
    Context context; 
    List<Users> users; 

    public Adapter(List<Users> getDataAdapter, Context context){ 
        super(); 
        this.users = getDataAdapter; 
        this.context = context; 
    } 

    // 注意:这个构造方法的第二个参数类型LoadXOrgasm看起来不太对,确保它是Context的子类
    public Adapter(List<Users> usersList, LoadXOrgasm context) { 
        // 建议在这里初始化users和context,否则这个构造方法是空的会有问题
        this.users = usersList;
        this.context = context;
    } 

    @NonNull 
    @Override 
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { 
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.cardview, parent, false); 
        ViewHolder viewHolder = new ViewHolder(view); 
        return viewHolder; 
    } 

    @Override 
    public void onBindViewHolder(@NonNull ViewHolder holder, int position) { 
        Users getDataAdapter1 = users.get(position); 
        holder.UserName.setText(getDataAdapter1.getName()); 
    } 

    @Override 
    public int getItemCount() { 
        return users.size(); 
    } 

    class ViewHolder extends RecyclerView.ViewHolder { 
        public TextView UserName; 

        public ViewHolder(View itemView) { 
            super(itemView); 
            UserName = itemView.findViewById(R.id.TextViewCard); 
            // 注:Android SDK 26+可以不用强制转换TextView
        } 
    } 
}

额外的小建议

  • 遵循Java命名规范:类名首字母大写(比如adapter改成Adapter,users改成Users),这样代码可读性更强
  • 检查第二个构造方法的LoadXOrgasm类型,确保它是Context的子类,否则会出现类型转换错误
  • Android SDK 26及以上版本,findViewById会自动返回对应控件类型,不用再强制转换(TextView)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:30:45