Java 自定义RecyclerView适配器不允许onBindViewHolder使用预定义的ViewHolder
我对android开发还很陌生,我正在尝试创建一个定制的Adpeter来提供一个RecyclerView,该视图只包含一个图像和一个文本视图 然而,我试图为onBindViewHolderVH、int和android studio定义一个简单的扩展ViewHolder,它不会接受自定义ViewHolder“MyViewHolder”,也就是说该方法不会覆盖其超类中的方法 如果我把参数变成一个普通的RecyclerView.ViewHolder,这没关系……但是我需要MyViewHolder中的额外变量 最后,根据的建议,我尝试修改类的“extends”声明,但没有任何效果 求求你,任何帮助都会很好Java 自定义RecyclerView适配器不允许onBindViewHolder使用预定义的ViewHolder,java,android,Java,Android,我对android开发还很陌生,我正在尝试创建一个定制的Adpeter来提供一个RecyclerView,该视图只包含一个图像和一个文本视图 然而,我试图为onBindViewHolderVH、int和android studio定义一个简单的扩展ViewHolder,它不会接受自定义ViewHolder“MyViewHolder”,也就是说该方法不会覆盖其超类中的方法 如果我把参数变成一个普通的RecyclerView.ViewHolder,这没关系……但是我需要MyViewHolder中的额
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;
}
}
你可以这样写
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;
}
}
你可以这样写
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;
}
}
改变
public class ProductAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolderr> {
到
它现在可以工作了改变
public class ProductAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolderr> {
到
它现在可以工作了另外,将MyViewHolder的访问修饰符从private更改为public。另外,将MyViewHolder的访问修饰符从private更改为public。谢谢!很好,谢谢!现在一切正常。