微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

android – RecyclerView.Adapter没有看到overBided onBindViewHolder

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

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类的实现之后:

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没有这种方法,但他存在.
如果我改变

public void onBindViewHolder(ViewHolder holder, int position)

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

预测编译正常,但类型绑定将是ViewDataBinding而不是BaseAdapterExtendedBinding.为什么会这样?有任何想法吗?

解决方法:

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

public class FooAdapter extends RecyclerView.Adapter {

不得不改为

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐