Android RecyclerView.Adapter未看到重写的onBindViewHolder方法?
我在项目中使用数据绑定和RecyclerView。 我有一个用于RecyclerView的基本适配器。看起来像这样Android RecyclerView.Adapter未看到重写的onBindViewHolder方法?,android,android-recyclerview,Android,Android Recyclerview,我在项目中使用数据绑定和RecyclerView。 我有一个用于RecyclerView的基本适配器。看起来像这样 public abstract class BaseAdapter<T extends ViewDataBinding> extends RecyclerView.Adapter<BaseAdapter.ViewHolder> { public BaseAdapter() {} public class ViewHolder extend
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 ...
}
}
BaseAdapterExtended似乎没有这种方法,但他确实存在。
如果我改变
public void onBindViewHolder(ViewHolder holder, int position)
到
投影编译良好,但类型绑定将是ViewDataBinding,而不是BaseAdapterExtendedBinding。为什么会这样?有什么想法吗?对我来说很好!
//这是我的观点
@Override
public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, final int i) {
MyViewHolder myViewHolder1 = (MyViewHolder)viewHolder;
myViewHolder1.like.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Toast.makeText(context, "yay" + i, Toast.LENGTH_SHORT ).show();
}
});
}
在这方面:
@Override
public void onBindViewHolder(ViewHolder holder, int position) {
super.onBindViewHolder(holder, position);
}
将ViewHolder替换为BaseAdapterExtended。ViewHolder在我的情况下,我忘记了参数化我的超类。创建类时,我还没有创建
ViewHolder
,除了方法上的错误之外,它是非常允许的。即:
public class FooAdapter extends RecyclerView.Adapter {
不得不改成
public class FooAdapter extends RecyclerView.Adapter<FooAdapter.FooViewHolder> {
公共类FooAdapter扩展了RecyclerView.Adapter{
无论如何都需要这样做,但我得到的唯一编译器错误是在
onBindViewHolder
中,我刚刚找到了这个奇怪问题的原因。这也发生在我的项目中,但仅适用于参数化的适配器,如您的适配器。所有其他适配器都看到了BindViewHolder()方法,而无需在类中显式指定ViewHolder。解决方案是使用任意随机参数类型对ViewHolder类进行参数化,这看起来像是一个bug
public abstract class BaseAdapter<T extends ViewDataBinding> extends RecyclerView.Adapter<BaseAdapter.ViewHolder> {
public BaseAdapter() {}
public class ViewHolder<RandomTypeNotUsed> 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 ...
}
公共抽象类BaseAdapter扩展了RecyclerView.Adapter{
公共BaseAdapter(){}
公共类ViewHolder扩展了RecyclerView.ViewHolder{
公共文件的装订;
公共视图持有者(视图){
超级(视图);
binding=DataBindingUtil.bind(视图);
}
}
@凌驾
公共无效onBindViewHolder(ViewHolder,int位置){
…代码。。。
}
}在
baseadapteredextended
中,ViewHolder的导入是什么?为什么在baseadapteredextended
中有一个名为GamesListAdapter
的构造函数?对不起,我重命名了对象。你能解决你的问题吗?我已经有整整一周的时间遇到这个问题了,这让我发疯了:-/为我工作能解决它吗?
public class FooAdapter extends RecyclerView.Adapter {
public class FooAdapter extends RecyclerView.Adapter<FooAdapter.FooViewHolder> {
public abstract class BaseAdapter<T extends ViewDataBinding> extends RecyclerView.Adapter<BaseAdapter.ViewHolder> {
public BaseAdapter() {}
public class ViewHolder<RandomTypeNotUsed> 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 ...
}