错误: XXXAdapter不是抽象的, 并且未覆盖Adapter中的抽象方法onBindViewHolder(ViewHolder,int)

一、问题描述

        在学习Android可侧滑删除的RecyclerView的时候,遇到了下面的报错

错误: SwipeDelAdapter不是抽象的, 并且未覆盖Adapter中的抽象方法onBindViewHolder(ViewHolder,int)
public class SwipeDelAdapter extends RecyclerView.Adapter {
       ^

        在上面的报错中,SwipeDelAdapter是我自定义的Adapter类。

        当我尝试通过Alt+Enter键修改代码时,Android Studio建议我实现onBindViewHolder这个方法。开发界面中的报错一共有两个:

错误: XXXAdapter不是抽象的, 并且未覆盖Adapter中的抽象方法onBindViewHolder(ViewHolder,int)_第1张图片

        而我的代码为

package com.cs.blackbox.adapter;

import android.annotation.SuppressLint;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import com.cs.blackbox.R;

import java.util.List;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;

public class SwipeDelAdapter extends RecyclerView.Adapter {

    private List list;
    private onAdapterItemClickListener itemClickListener;
    public SwipeDelAdapter(List list) {
        this.list = list;
    }

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

    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder, @SuppressLint("RecyclerView") final int position) {

        holder.sda_tv_content.setText(list.get(position).toString());
        holder.sda_tv_content.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                itemClickListener.onItemClick(view,position);
            }
        });

        holder.sda_tv_delete.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                itemClickListener.onItemClick(view,position);
            }
        });
    }

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

    static class ViewHolder extends RecyclerView.ViewHolder{

        TextView sda_tv_content, sda_tv_delete;

        public ViewHolder(@NonNull View itemView) {
            super(itemView);
            sda_tv_content=itemView.findViewById(R.id.sda_tv_content);
            sda_tv_delete=itemView.findViewById(R.id.sda_tv_delete);
        }
    }


    public void reFreshData(List list){
        this.list=list;
        notifyDataSetChanged();
    }


    public interface onAdapterItemClickListener{
        void onItemClick(View view,int selectPosition);
    }

    public void setItemClickListener(onAdapterItemClickListener itemClickListener) {
        this.itemClickListener = itemClickListener;
    }
}

        布局文件(item_text.xml)的代码为




    

    

        我通过网络搜索尝试了一些办法,但是没能解决。例如,参考博客Android踩坑的解决方案:将ViewHolder写到外面,使它作为一个与Adapter类同级的静态内部类,而不要放在Adapter类里面。该方案无法解决我的问题。以及,参考博客BaseRecyAdapter不是抽象的的解决方案:将ViewHolder类改为public static。该方案还是无法解决我的问题。

二、我的解决方法(仅供参考)

        1、将ViewHolder类还是放在Adapter类的内部。

        2、将XXXAdapter的继承修改一下,原来是这样继承的:

public class SwipeDelAdapter extends RecyclerView.Adapter{

}

        把它改成这样(添加一个,其中XXXAdapter和XXXViewHolder都是自定义的类,名字根据大家的项目和用途会有所不同):

public class SwipeDelAdapter extends RecyclerView.Adapter {

}

        然后我的项目就build成功了。运行效果:

错误: XXXAdapter不是抽象的, 并且未覆盖Adapter中的抽象方法onBindViewHolder(ViewHolder,int)_第2张图片

三、参考

        1、Android RecyclerView 二级列表侧滑简单实现,主要是参考了这一份代码。然而,这份代码的坑太多。

        2、天生要强注定要凉的博客

        3、Qin小宝的博客

        4、9527xiha的博客

你可能感兴趣的:(Android相关,Android,Android开发)