RecyclerView.Adapter看不到重写的onBindViewHolder方法吗? [英] RecyclerView.Adapter does not see overridden onBindViewHolder method?
问题描述
我在项目中使用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屋!