我在我的项目中使用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 举报,一经查实,本站将立刻删除。