skip to Main Content

(list , this)<= this Line Creates Problem.

This is my Main Acitivty Code


import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;

import com.example.foodorder.Adapters.MainAdapter;
import com.example.foodorder.Models.MainModel;
import com.example.foodorder.databinding.ActivityMainBinding;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity {

    ActivityMainBinding binding;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        binding = ActivityMainBinding.inflate(getLayoutInflater());
        setContentView(binding.getRoot());
        ArrayList<MainModel> list = new ArrayList<>();
        list.add(new MainModel(R.drawable.tabba, "TableA", "2500", "Unique Table for Interior Lovers"));
        list.add(new MainModel(R.drawable.tabbb, "TableB", "3500", "Unique Table for Interior Lovers"));
        list.add(new MainModel(R.drawable.tabbd, "TableC", "4500", "Unique Table for Interior Lovers"));
        list.add(new MainModel(R.drawable.tabbe, "TableD", "55500", "Unique Table for Interior Lovers"));
        MainAdapter adapter = new MainAdapter(list , this);
        binding.recyclerview.setAdapter(adapter);

    }
}

Main Adapter Code

public class MainAdapter extends RecyclerView.Adapter<MainAdapter.viewholder> {
    ArrayList<MainModel> list;
    Context context;
    @NonNull
    @Override
    public viewholder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(context).inflate(R.layout.sample_mainfood,parent,false);
        return new viewholder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull viewholder holder, int position) {
        final MainModel model =list.get(position);
        holder.mainName.setText(model.getName());
        holder.imageView.setImageResource(model.getImage());
        holder.price.setText(model.getPrice());
        holder.description.setText(model.getDescription());

    }

    @Override
    public int getItemCount() {

        return list.size();
    }

    public class viewholder extends RecyclerView.ViewHolder{

        ImageView imageView;
        TextView mainName, price, description;

        public viewholder(@NonNull View itemView) {
            super(itemView);
            imageView = itemView.findViewById(R.id.imageView);
            imageView = itemView.findViewById(R.id.name);
            imageView = itemView.findViewById(R.id.orderPrice);
            imageView = itemView.findViewById(R.id.description);

        }
    }
}

This one is Main Model

package com.example.foodorder.Models;

public class MainModel {
    int image;
    String name, price, description;

    public MainModel(int image, String name, String price, String description) {
        this.image = image;
        this.name = name;
        this.price = price;
        this.description = description;
    }

    public int getImage() {
        return image;
    }

    public void setImage(int image) {
        this.image = image;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPrice() {
        return price;
    }

    public void setPrice(String price) {
        this.price = price;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }
}

2

Answers


  1. I guess you forgot to create a constructor for MainAdapter class

    public class MainAdapter extends RecyclerView.Adapter<MainAdapter.viewholder> {
        ArrayList<MainModel> list;
        Context context;
    
        MainAdapter(ArrayList<MainModel> data, Context ctx) {
            list = data;
            context = ctx;
        }
    
        // ...
    }
    
    Login or Signup to reply.
  2. Here, In your code, you are missing a constructor as mentioned by @Sergey as well as you are passing the wrong context in onCreateViewHolder().You should pass parent.getContext();

    public class MainAdapter extends RecyclerView.Adapter<MainAdapter.viewholder> {
    ArrayList<MainModel> list;
    Context context;
    
    MainAdapter(ArrayList<MainModel> data, Context ctx) {
        list = data;
        context = ctx;
    }
    
    @NonNull
    @Override
    public viewholder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.sample_mainfood,parent,false);
        return new viewholder(view);
    }
    //...
    }
    
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search