简体   繁体   English

Custom RecyclerView适配器不允许onBindViewHolder使用预定义的ViewHolder

[英]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.

相关问题 onBindViewHolder(RecyclerView.ViewHolder持有人,整数位置)-无法访问持有人的“有趣”-Kotlin to Java - onBindViewHolder(RecyclerView.ViewHolder holder, int position) - can't access holder's 'fun' - Kotlin to Java 以自定义预定义顺序重新排列HashMap密钥 - Re-arrange HashMap keys in custom pre-defined order 自定义适配器ViewHolder问题 - Custom Adapter ViewHolder issue 无法从 ViewHolder (RecycleView) 调用 Adapter(onBindViewHolder) 中的方法 - Unable to call method in Adapter(onBindViewHolder) from ViewHolder (RecycleView) 视图在RecyclerView Adapter中的onBindViewHolder中返回NullPointerException - Views return NullPointerException in onBindViewHolder in RecyclerView Adapter RecyclerView中没有调用适配器的onCreateViewHolder和onBindViewHolder方法? - Adapter onCreateViewHolder and onBindViewHolder methods are not getting called in RecyclerView? Recyclerview 不调用任何适配器方法 :onCreateViewHolder,onBindViewHolder, - Recyclerview not call any Adapter method :onCreateViewHolder,onBindViewHolder, RecyclerView Adapter 不会膨胀正确的布局 - RecyclerView Adapter won't inflate the correct layout 无法从ViewHolder(RecyclerView)调用适配器中的方法 - Unable to call method in Adapter from ViewHolder (RecyclerView) RecyclerView.Adapter <RecyclerAdapter.ViewHolder> 混乱 - RecyclerView.Adapter<RecyclerAdapter.ViewHolder> confusion
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM