[英]Custom RecyclerView adapter won't allow onBindViewHolder to use pre-defined ViewHolder
I'm pretty new to android development, and I'm trying to create a custom adpater to provide a RecyclerView with a view containing just an image and a textview. 我对Android开发很新,我正在尝试创建一个自定义adpater来为RecyclerView提供一个只包含图像和textview的视图。
However, I'm trying to define a simple extended ViewHolder for onBindViewHolder(VH, int) and android studio simply will not take the custom ViewHolder, 'MyViewHolder' - saying that "the method does not override method from its superclass." 但是,我正在尝试为onBindViewHolder(VH,int)定义一个简单的扩展ViewHolder,而android studio根本不会采用自定义ViewHolder,'MyViewHolder' - 说“该方法不会覆盖其超类的方法”。
It's fine if I make the parameter into just a regular RecyclerView.ViewHolder...but I need the extra variables in MyViewHolder. 如果我将参数设置为常规的RecyclerView.ViewHolder就可以了......但是我需要MyViewHolder中的额外变量。
Finally, I tried altering the 'extends' declaration for the class, as per NT 's suggestion, but this did nothing. 最后,我尝试根据NT的建议改变课程的“扩展”声明,但这没有做任何事情。
Please, any help would be great! 拜托,任何帮助都会很棒!
public class ProductAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
private ArrayList CategoryNames;
private ArrayList CategoryImages;
private Context Context;
public ProductAdapter(Context context, ArrayList categoryNames, ArrayList categoryImages){
this.Context = context;
this.CategoryNames = categoryImages;
this.CategoryImages = categoryImages;
}
private class MyViewHolder extends RecyclerView.ViewHolder {
// initialise the item view's
TextView name;
ImageView image;
private MyViewHolder(View itemView) {
super(itemView);
// get the reference of item view's
name = (TextView) itemView.findViewById(R.id.name);
image = (ImageView) itemView.findViewById(R.id.image);
}
}
@Override
public int getItemCount() {
return CategoryNames.size();
}
@Override
public void onBindViewHolder(MyViewHolder holder, final int position) {
// set the data in items
holder.name.setText(CategoryNames.get(position).toString());
holder.image.setImageResource(CategoryImages.get(position));
// implement setOnClickListener event on item view.
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// display a toast with person name on item click
Toast.makeText(Context, CategoryNames.get(position).toString(),
Toast.LENGTH_SHORT).show();
}
});
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType){
// infalte the item Layout
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.card_product, parent, false);
// set the view's size, margins, paddings and layout parameters
MyViewHolder vh = new MyViewHolder(v); // pass the view to View Holder
return vh;
}
}
Change 更改
public class ProductAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolderr> {
to 至
public class ProductAdapter extends RecyclerView.Adapter<ProductAdapter.MyViewHolder>
It will work now 它现在可以工作了
You can write it like this 你可以像这样写
public class ProductAdapter extends RecyclerView.Adapter<ProductAdapter.MyViewHolder> {
private ArrayList CategoryNames;
private ArrayList CategoryImages;
private Context Context;
public ProductAdapter(Context context, ArrayList categoryNames, ArrayList categoryImages){
this.Context = context;
this.CategoryNames = categoryImages;
this.CategoryImages = categoryImages;
}
private class MyViewHolder extends RecyclerView.ViewHolder {
// initialise the item view's
TextView name;
ImageView image;
private MyViewHolder(View itemView) {
super(itemView);
// get the reference of item view's
name = (TextView) itemView.findViewById(R.id.name);
image = (ImageView) itemView.findViewById(R.id.image);
}
}
@Override
public int getItemCount() {
return CategoryNames.size();
}
@Override
public void onBindViewHolder(MyViewHolder holder, final int position){
// set the data in items
holder.name.setText(CategoryNames.get(position).toString());
holder.image.setImageResource(CategoryImages.get(position));
// implement setOnClickListener event on item view.
holder.itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// display a toast with person name on item click
Toast.makeText(Context, CategoryNames.get(position).toString(),
Toast.LENGTH_SHORT).show();
}
});
}
@Override
public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType){
// infalte the item Layout
View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.card_product, parent, false);
// set the view's size, margins, paddings and layout parameters
MyViewHolder vh = new MyViewHolder(v); // pass the view to View Holder
return vh;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.