I have the following RecyclerViewAdapter class. What's weird about the following code is if I don't declare the ViewHolder class static, I get the following error:
Error:(24, 8) error: MaterialRequiredListRecyclerViewAdapter is not abstract and does not override abstract method onBindViewHolder(MaterialRequiredListRecyclerViewAdapter.MaterialRequiredRecyclerViewHolder,int) in Adapter
However as soon as I declare this class static, the error goes away.
I know that declaring the ViewHolder class enforces the prevention of memory leaks by not allowing the inner class use the member variables of the outer class or expose it's own instance to other classes, however I don't understand the reason for the above mentioned error.
Code:
public class MaterialRequiredListRecyclerViewAdapter<T> extends RecyclerView.Adapter<MaterialRequiredListRecyclerViewAdapter.MaterialRequiredRecyclerViewHolder> {
private int mLayoutFileId;
private List<String> mMaterialRequiredDataList;
private Context mContext;
public MaterialRequiredListRecyclerViewAdapter(Context con, int layoutFileId, List materialRequiredList) {
mContext = con;
mLayoutFileId = layoutFileId;
mMaterialRequiredDataList = materialRequiredList;
}
@Override
public MaterialRequiredRecyclerViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View itemView = LayoutInflater.
from(parent.getContext()).
inflate(mLayoutFileId, parent, false);//R.layout.layout_cardview_apointments_for_video_call_frag
return new MaterialRequiredRecyclerViewHolder(itemView);
}
@Override
public void onBindViewHolder(MaterialRequiredRecyclerViewHolder holder, int position) {
if(mMaterialRequiredDataList != null)
holder.mMaterialRequiredTV.setText(mMaterialRequiredDataList.get(position));
}
@Override
public int getItemCount() {
return mMaterialRequiredDataList.size();
}
public class MaterialRequiredRecyclerViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener{
@BindView(R.id.text_view_list_cell)
TextView mMaterialRequiredTV;
public MaterialRequiredRecyclerViewHolder(View itemView) {
super(itemView);
ButterKnife.bind(this, itemView);
}
@Override
public void onClick(View v) {
}
}
}