Recupere objetos anidados de Firestore para la vista de reciclaje.
¿Cómo podemos recuperar los objetos anidados de Firestore y mostrarlos en un RecyclerView? Desde la base de datos, quiero obtener los objetos anidados de los productos en el RecyclerView para que se muestren allí todos los productos con sus detalles. Adjunto el código de la clase modelo y del adaptador.
CLASE MODELO
public class ProductModelClass {
String Category, Details,Measure,Name;
Number DiscountPrice, NumberofProducts, Price;
public ProductModelClass() {}
public ProductModelClass(String category, String details, String measure, String name, Number discountPrice, Number numberofProducts, Number price) {
Category = category;
Details = details;
Measure = measure;
Name = name;
DiscountPrice = discountPrice;
NumberofProducts = numberofProducts;
Price = price;
}
public String getCategory() {
return Category;
}
public void setCategory(String category) {
Category = category;
}
public String getDetails() {
return Details;
}
public void setDetails(String details) {
Details = details;
}
public String getMeasure() {
return Measure;
}
public void setMeasure(String measure) {
Measure = measure;
}
public String getName() {
return Name;
}
public void setName(String name) {
Name = name;
}
public Number getDiscountPrice() {
return DiscountPrice;
}
public void setDiscountPrice(Number discountPrice) {
DiscountPrice = discountPrice;
}
public Number getNumberofProducts() {
return NumberofProducts;
}
public void setNumberofProducts(Number numberofProducts) {
NumberofProducts = numberofProducts;
}
public Number getPrice() {
return Price;
}
public void setPrice(Number price) {
Price = price;
}
}
ADAPTADOR
public class ProductListAdapter extends RecyclerView.Adapter<productlistadapter.viewholder> {
private OnItemClickListener listener = null;
ArrayList<productmodelclass> data;
public ProductListAdapter(ArrayList<productmodelclass> data, OnItemClickListener listener) {
this.data = data;
this.listener = listener;
}
@NonNull
@Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewTyp) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.products_item, null);
return new ViewHolder(view);
}
@Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
holder.productTitle.setText(data.get(position).getName());
holder.productQty.setText(String.valueOf(data.get(position).getNumberofProducts()));
holder.productPrice.setText(String.valueOf(data.get(position).getPrice()));
holder.productOffer.setText(String.valueOf(data.get(position).getDiscountPrice()));
// Enlazando onClickListener
holder.bind(data.get(position),listener);
}
public interface OnItemClickListener {
void onItemClick(ProductModelClass item);
}
@Override
public int getItemCount() {
return data.size();
}
public class ViewHolder extends RecyclerView.ViewHolder {
TextView productTitle, productQty, productPrice, productOffer;
MaterialButton availability;
public ViewHolder(@NonNull View itemView) {
super(itemView);
productTitle = itemView.findViewById(R.id.product_title);
productQty = itemView.findViewById(R.id.product_sub);
productPrice = itemView.findViewById(R.id.product_price);
productOffer = itemView.findViewById(R.id.product_offer_price);
availability = itemView.findViewById(R.id.availability_prod);
}
public void bind(ProductModelClass productmodelclass, OnItemClickListener listener) {
itemView.setOnClickListener(view -> listener.onItemClick(productmodelclass));
}
}
}
Esta es la estructura de mi base de datos. Quiero recuperar todos los diferentes productos bajo “tablets” y “mobiles” en mi RecyclerView. (Enlace de imagen: https://i.stack.imgur.com/Bgq2e.png)</productlistadapter.viewholder>
davy.ai
Para recuperar los objetos anidados de Firestore y mostrarlos en una vista de reciclaje, puedes seguir estos pasos:
Aquí hay un ejemplo de fragmento de código para recuperar datos de Firestore y pasarlos al adaptador:
Nota: Asegúrate de agregar las dependencias necesarias de Firebase y configurar la instancia de Firestore antes de usarla. Además, reemplaza “Tablets” por “Mobiles” para obtener los datos de la categoría de móviles.