Android踩坑:错误: xxx不是抽象的, 并且未覆盖xxx中的抽象方法onBindViewHolder

最近维护老项目的时候,发现有2个不同界面的gridview使用了同一个adapter,adapter里面list的实体类之前固定写的是String,但是新的需求需要匹配不同的bean,因此需要将adapter抽成基类+2个子类的形式,基类中adapter是静态的,改成使用泛型来匹配不同的bean。

三板斧改完后运行,报错:MyAdapter不是抽象的, 并且未覆盖MyAdapter中的抽象方法onBindViewHolder。
这是啥情况,确实是覆盖了onBindViewHolder的
这里写图片描述
基类的adapter如下:

public static class MyAdapter<T extends Object> extends RecyclerView.Adapter<ViewHolder> {
    private Context mContext;
    protected List mDatas;
    private LayoutInflater mInflater;
    private boolean mIsChangeItemLayout = false;

    public MyAdapter(Context mContext, List datas, boolean isChangItemlayout) {
        this.mContext = mContext;
        setList(datas);
        setIsChangeLayout(isChangItemlayout);
        mInflater = LayoutInflater.from(this.mContext);
    }

    public void updateData(List datas) {
        setList(datas);
        notifyDataSetChanged();
    }

    private void setList(List datas) {
        this.mDatas = datas;
    }

    private void setIsChangeLayout(boolean changItemlayout) {
        this.mIsChangeItemLayout = changItemlayout;
    }

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

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int i) {
        View view = mInflater.inflate(mIsChangeItemLayout ? R.layout.privilege_category_title_item : R.layout.fav_category_title_item,null);
        ViewHolder viewHolder = new ViewHolder(view);
        return viewHolder;
    }

    @Override
    public void onBindViewHolder(final ViewHolder viewHolder, final int position) {
        viewHolder.fav_title_btn.setText("");
        viewHolder.fav_title_btn.setGravity(Gravity.CENTER);
        viewHolder.fav_title_btn.setOnKeyListener(new OnKeyListener() {
            @Override
            public boolean onKey(View view, int i, KeyEvent keyEvent) {
                if (keyEvent.getAction() == KeyEvent.ACTION_DOWN ) {
                    Log.d(TAG, "---------------key down--------");
                    switch (i) {
                        case KeyEvent.KEYCODE_DPAD_DOWN:
                            viewHolder.fav_title_btn.setBackgroundResource(R.drawable.horizontalscrollview_title_selector_grey);
                            break;
                        default:
                            break;
                    }
                }
                return false;
            }
        });

    }

    public class ViewHolder extends RecyclerView.ViewHolder {
        TextView fav_title_btn;
        public ViewHolder(View view) {
            super(view);
            fav_title_btn =  view.findViewById(R.id.fav_title_btn);
        }
    }
}

子类中重写这一句代码
这里写图片描述
看起来没什么问题,明明在子类里面重写了viewHolder.fav_title_btn.setText("")

一番搜索,问题解决:

将ViewHolder 写到外面,作为一个与adapter同级的静态内部类,不要放在adapter里面

public static class ViewHolder extends RecyclerView.ViewHolder {
    TextView fav_title_btn;
    public ViewHolder(View view) {
        super(view);
        fav_title_btn =  view.findViewById(R.id.fav_title_btn);
    }
}

你可能感兴趣的:(android,apk开发)