我对Android开发很新,我正在尝试创建一个自定义adpater来为RecyclerView提供一个只包含图像和textview的视图。
然而,我正在尝试为onBindViewHolder(VH,int)定义一个简单的扩展ViewHolder,而android studio根本不会采用自定义ViewHolder,'MyViewHolder' - 说“该方法不会覆盖方法它的超类。“
如果我将参数设置为常规的RecyclerView.ViewHolder就可以了......但是我需要MyViewHolder中的额外变量。
最后,根据N.T.的建议,我尝试改变类的'extends'声明,但这没有做任何事。
拜托,任何帮助都会很棒!
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;
}
}
答案 0 :(得分:2)
更改
public class ProductAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolderr> {
到
public class ProductAdapter extends RecyclerView.Adapter<ProductAdapter.MyViewHolder>
现在可以使用
答案 1 :(得分:0)
你可以像这样写
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;
}
}