首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法用类中的onBindViewHolder实现扩展RecyclerView.Adapter

无法用类中的onBindViewHolder实现扩展RecyclerView.Adapter
EN

Stack Overflow用户
提问于 2020-03-12 06:01:02
回答 2查看 84关注 0票数 0

我刚在一周内加入了这个论坛,我在安卓系统中遇到了RecyclerView.Adapter的问题。

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

下面是我内部类的代码:

代码语言:javascript
复制
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;}
}

下面是适配器的代码:

代码语言:javascript
复制
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;}
}

下面是它所显示的错误:

代码语言:javascript
复制
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

谢谢你解决我的问题

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-03-12 06:26:21

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

代码语言:javascript
复制
public class EventAdapter extends RecyclerView.Adapter<EventAdapter.ViewHolder>

代码语言:javascript
复制
 public void onBindViewHolder(EventAdapter.ViewHolder viewHolder, final int position)
票数 0
EN

Stack Overflow用户

发布于 2020-03-12 06:29:44

代码语言:javascript
复制
public class EventAdapter extends RecyclerView.Adapter<EventAdapter.ViewHolder> {

@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    return null;
}

@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {

}

@Override
public int getItemCount() {
    return 0;
}

public static class ViewHolder extends RecyclerView.ViewHolder {
    public ViewHolder(@NonNull View itemView) {
        super(itemView);
    }
}

}

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60648389

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档