RecyclerView.Adapter看不到重写的onBindViewHolder方法吗? [英] RecyclerView.Adapter does not see overridden onBindViewHolder method?

查看:351
本文介绍了RecyclerView.Adapter看不到重写的onBindViewHolder方法吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在项目中使用DataBindings和RecyclerView. 我有一个用于RecyclerView的基本适配器.看起来像这样

I use DataBindings and RecyclerView in my project. I have a base adapter for RecyclerView. It looks like this

public abstract class BaseAdapter<T extends ViewDataBinding> extends RecyclerView.Adapter<BaseAdapter.ViewHolder> {

    public BaseAdapter() {}

    public class ViewHolder extends RecyclerView.ViewHolder {

        public T binding;

        public ViewHolder(View view) {
            super(view);
            binding = DataBindingUtil.bind(view);
        }
    }

    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        ... code ...
        }

}

ViewHolder扩展类仅绑定字段类型有所不同. 在实现扩展BaseAdapter类之后:

ViewHolder extended classes differs only binding field type. After the implementation of the extended BaseAdapter class:

public class BaseAdapterExtended extends BaseAdapter<BaseAdapterExtendedBinding> {

    public BaseAdapterExtended(ArrayList<ItemModel> itemModels) {
        super();
        mData = itemModels;
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        LayoutInflater inflater = LayoutInflater.from(parent.getContext());
        return new ViewHolder(BaseAdapterExtendedBinding.inflate(inflater, parent, false).getRoot());
    }

    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        super.onBindViewHolder(holder, position);
    }

    @Override
    protected View getItemRootView(ViewHolder holder) {
        return holder.binding.item;
    }

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

下一个编译错误:

error: BaseAdapterExtended is not abstract and does not override abstract method onBindViewHolder(BaseAdapter.ViewHolder,int) in Adapter

似乎像BaseAdapterExtended没有这种方法,但是他存在. 如果我更改

Seems like BaseAdapterExtended hasn't this method, but he exists. If I change

public void onBindViewHolder(ViewHolder holder, int position)

public void onBindViewHolder(BaseAdapter.ViewHolder holder, int position)

投影编译良好,但是类型绑定将是ViewDataBinding而不是BaseAdapterExtendedBinding.为什么会这样呢?有什么想法吗?

Projections compiled fine, but type binding will be ViewDataBinding instead BaseAdapterExtendedBinding. Why is this happening? Any ideas?

推荐答案

在我的情况下,我忘记了参数化我的超类.创建类时,我还没有创建ViewHolder,除了该方法的错误外,它非常宽松.即:

In my case I had forgotten to parameterize my superclass. When creating the class I hadn't yet created the ViewHolder, and it was very permissive except for the error on that method. I.e.:

public class FooAdapter extends RecyclerView.Adapter {

必须更改为

public class FooAdapter extends RecyclerView.Adapter<FooAdapter.FooViewHolder> {

无论如何都需要这样做,但是我遇到的唯一编译器错误是在onBindViewHolder中.

This needed to be done anyways, but the only compiler error I got was in onBindViewHolder.

这篇关于RecyclerView.Adapter看不到重写的onBindViewHolder方法吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆