java - 无法在我的类中使用 onBindViewHolder 实现扩展 RecyclerView.Adapter

标签 java android android-recyclerview

我刚加入这个论坛不到一周,就遇到了 Android 中 RecyclerView.Adapter 的问题。

通过遵循示例代码和文档,我尝试自己构建一个自定义适配器类,但它停留在从其父类(super class) RecyclerView.Adapter 继承的方法之一上。虽然我像示例代码一样编写了继承viewholder的内部类,但是当涉及到onBindViewHolder()

时,它仍然有错误

这是我的内部类代码:

public static class ViewHolder extends RecyclerView.ViewHolder{
   private final TextView tvTitle,tvDate,tvTime;
   public ViewHolder(View v){
        super(v);

        Log.d(TAG,"building view holder");

        tvTitle=v.findViewById(R.id.item_tvTitle);
        tvDate=v.findViewById(R.id.item_tvDate);
        tvTime=v.findViewById(R.id.item_tvTime);

        //set onclick listener to start another activity
        v.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {

            }
       });
   }

   public TextView getTvTitle(){return tvTitle;}
   public TextView getTvDate(){return tvDate;}
   public TextView getTvTime(){return tvTime;}
}

这是我的适配器代码:

public class EventAdapter extends RecyclerView.Adapter {
    private static final String TAG="EventAdapter";
    private Event[] dataset;

    public static class ViewHolder extends RecyclerView.ViewHolder{
        private final TextView tvTitle,tvDate,tvTime;
        public ViewHolder(View v){
            super(v);

            Log.d(TAG,"building view holder");

            tvTitle=v.findViewById(R.id.item_tvTitle);
            tvDate=v.findViewById(R.id.item_tvDate);
            tvTime=v.findViewById(R.id.item_tvTime);

            //set onclick listener to start another activity
            v.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {

                }
            });
        }

        public TextView getTvTitle(){return tvTitle;}
        public TextView getTvDate(){return tvDate;}
        public TextView getTvTime(){return tvTime;}
    }

    public EventAdapter(List<Event> dataset){
        Log.d(TAG,"Constructor, converting list to array");
        this.dataset=dataset.toArray(new Event[dataset.size()]);
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup container,int viewType){
        Log.d(TAG,"onCreateViewHolder");
        View v= LayoutInflater.from(container.getContext()).inflate(R.layout.item_event,container,false);
        return new ViewHolder(v);
    }

    @Override
    public void onBindViewHolder(ViewHolder viewHolder, final int position){
        Log.d(TAG,"onBindViewHolder");

        viewHolder.getTvTitle().setText("Title: "+dataset[position].getTitle());
        viewHolder.getTvDate().setText("Date: "+dataset[position].getDate());
        viewHolder.getTvTime().setText("Time: "+dataset[position].getTime());
    }

    @Override
    public int getItemCount(){return dataset.length;}
}

以下是它显示的错误:

1. class 'EventAdapter'(which is my class inherited from the adapter) must either declared as abstract or implements abstract method onBindViewHolder(VH,int) in 'Adapter'
2. method(means the onBindViewHolder) does not override or implement a method from a supertype

感谢您解决我的问题

最佳答案

因此,要成功编译,请更改

public class EventAdapter extends RecyclerView.Adapter<EventAdapter.ViewHolder>

 public void onBindViewHolder(EventAdapter.ViewHolder viewHolder, final int position)

关于java - 无法在我的类中使用 onBindViewHolder 实现扩展 RecyclerView.Adapter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60648389/

相关文章:

java - RecyclerView 项目可点击但不可见

java - RecyclerView 选择列表中的每 8 个项目。怎么能阻止呢?

java - MongoDB:如何通过java驱动程序创建经过身份验证的数据库

java - WURFL Java API 无法正确识别移动应用程序用户代理

java - 检查互联网连接是否可用 (https)

java - 如何使用 arraylist 制作可扩展列表?

java - 如何确定分支覆盖率(从控制流图中)?

java - JFileChooser - 关于 "open"和 "cancel"按钮。 java

android - 如何在 Android XML 中绘制圆弧?

java - Gradle Android 依赖产品风格