Home > Mobile >  How to show all items of list in recyclerview?
How to show all items of list in recyclerview?

Time:05-17

I have an adapter that is showing limited Items on Fragment.

 @Override
public int getItemCount() {
    int limit = 7;
    return Math.min(latestProductModelList.size(),limit);
}

and I want to show all the items of list in recyclerview when I click on ViewAll button using the same adapter on another acitivity.

this is my adapter. `

public class LatestProductAdapter extends RecyclerView.Adapter<LatestProductAdapter.ViewHolder> {
    List<LatestProductModel> latestProductModelList = new ArrayList<>();
    Context context;
    LatestProductClickInterface latestProductClickInterface;

    public LatestProductAdapter(Context context, LatestProductClickInterface latestProductClickInterface) {
        this.context = context;
        this.latestProductClickInterface = latestProductClickInterface;
    }

    @NonNull
    @Override
    public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view = LayoutInflater.from(context).inflate(R.layout.item_layout,parent,false);
        return new ViewHolder(view);
    }

    @Override
    public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
        LatestProductModel latestProductModel = latestProductModelList.get(position);
        Glide.with(context).load(latestProductModel.getImage()).into(holder.itemImage);
        holder.itemTitle.setText(latestProductModel.getTitle());
        holder.itemView.setOnClickListener(v -> {
            latestProductClickInterface.OnLatestProductClicked(latestProductModelList.get(position));
        });
    }


    @Override
    public int getItemCount() {
        int limit = 7;
        return Math.min(latestProductModelList.size(),limit);
    }

    @SuppressLint("NotifyDataSetChanged")
    public void updateList(List<LatestProductModel> latestProductModels){
        latestProductModelList.clear();
        latestProductModelList.addAll(latestProductModels);
        Collections.reverse(latestProductModelList);
        notifyDataSetChanged();
    }

    public static class ViewHolder extends RecyclerView.ViewHolder {
        ImageView itemImage;
        TextView itemTitle;
        public ViewHolder(@NonNull View itemView) {
            super(itemView);
            itemImage = itemView.findViewById(R.id.item_img);
            itemTitle = itemView.findViewById(R.id.item_title);
        }
    }
}

`

How to achieve this? Or is there another way to achieve this? kindly help me.

CodePudding user response:

You can use bellow codes for your adapter:

public class LatestProductAdapter extends RecyclerView.Adapter<LatestProductAdapter.ViewHolder> {
List<LatestProductModel> latestProductModelList = new ArrayList<>();
Context context;
LatestProductClickInterface latestProductClickInterface;
private boolean shouldShowAllItems;

public LatestProductAdapter(Context context, LatestProductClickInterface latestProductClickInterface , boolean shouldShowAllItems) {
    this.context = context;
    this.latestProductClickInterface = latestProductClickInterface;
    this.shouldShowAllItems = shouldShowAllItems;
}

@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
    View view = LayoutInflater.from(context).inflate(R.layout.item_layout,parent,false);
    return new ViewHolder(view);
}

@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
    LatestProductModel latestProductModel = latestProductModelList.get(position);
    Glide.with(context).load(latestProductModel.getImage()).into(holder.itemImage);
    holder.itemTitle.setText(latestProductModel.getTitle());
    holder.itemView.setOnClickListener(v -> {
        latestProductClickInterface.OnLatestProductClicked(latestProductModelList.get(position));
    });
}


@Override
public int getItemCount() {
    if (shouldShowAllItems){
        return latestProductModelList.size();
    }else {
        int limit = 7;
        return Math.min(latestProductModelList.size(), limit);
    }
}

@SuppressLint("NotifyDataSetChanged")
public void updateList(List<LatestProductModel> latestProductModels){
    latestProductModelList.clear();
    latestProductModelList.addAll(latestProductModels);
    Collections.reverse(latestProductModelList);
    notifyDataSetChanged();
}

public static class ViewHolder extends RecyclerView.ViewHolder {
    ImageView itemImage;
    TextView itemTitle;
    public ViewHolder(@NonNull View itemView) {
        super(itemView);
        itemImage = itemView.findViewById(R.id.item_img);
        itemTitle = itemView.findViewById(R.id.item_title);
    }
    }
}

and create adapter object accourding your need:

LatestProductAdapter latestProductAdapter = LatestProductAdapter(context , this ,//true or false);
  • Related