Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/208.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 自定义RecyclerView适配器不允许onBindViewHolder使用预定义的ViewHolder_Java_Android - Fatal编程技术网

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

Java 自定义RecyclerView适配器不允许onBindViewHolder使用预定义的ViewHolder,java,android,Java,Android,我对android开发还很陌生,我正在尝试创建一个定制的Adpeter来提供一个RecyclerView,该视图只包含一个图像和一个文本视图 然而,我试图为onBindViewHolderVH、int和android studio定义一个简单的扩展ViewHolder,它不会接受自定义ViewHolder“MyViewHolder”,也就是说该方法不会覆盖其超类中的方法 如果我把参数变成一个普通的RecyclerView.ViewHolder,这没关系……但是我需要MyViewHolder中的额

我对android开发还很陌生,我正在尝试创建一个定制的Adpeter来提供一个RecyclerView,该视图只包含一个图像和一个文本视图

然而,我试图为onBindViewHolderVH、int和android studio定义一个简单的扩展ViewHolder,它不会接受自定义ViewHolder“MyViewHolder”,也就是说该方法不会覆盖其超类中的方法

如果我把参数变成一个普通的RecyclerView.ViewHolder,这没关系……但是我需要MyViewHolder中的额外变量

最后,根据的建议,我尝试修改类的“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;
}
}

你可以这样写

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。谢谢!很好,谢谢!现在一切正常。