RecyclerView.Adapter没有看到覆盖onBindViewHolder

Tib*_*ral 11 android android-recyclerview

我在我的项目中使用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 ...
        }

}
Run Code Online (Sandbox Code Playgroud)

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();
    }
}
Run Code Online (Sandbox Code Playgroud)

我有下一个编译错误:

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

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

public void onBindViewHolder(ViewHolder holder, int position)
Run Code Online (Sandbox Code Playgroud)

public void onBindViewHolder(BaseAdapter.ViewHolder holder, int position)
Run Code Online (Sandbox Code Playgroud)

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

use*_*019 23

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

public class FooAdapter extends RecyclerView.Adapter {
Run Code Online (Sandbox Code Playgroud)

不得不改为

public class FooAdapter extends RecyclerView.Adapter<FooAdapter.FooViewHolder> {
Run Code Online (Sandbox Code Playgroud)

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


Sha*_*yan 7

在这一行:

@Override
public void onBindViewHolder(ViewHolder holder, int position) {
    super.onBindViewHolder(holder, position);
}
Run Code Online (Sandbox Code Playgroud)

更换ViewHolderBaseAdapterExtended.ViewHolder


小智 1

对我来说效果很好!//就像我的图像视图

@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();
            }
        });
    }
Run Code Online (Sandbox Code Playgroud)