Does anyone know why one of the two adapters works but the other does not?

1

I have 2 classes called MyAdapterBig / MyAdapterSmall, they represent two frigates. The issue is that one of them the small is perfectly, when I give the delete button delete, but the other Adapter, does not enter the for ... then ... I'm going crazy.

Can someone see the fault that I can not see?

MyAdapterBig, this one does not go, I do not know why he never enters here:

for (DataSnapshot prodSnapshot : dataSnapshot.getChildren()) {

What I do not know because ...

package com.virtualmon.sergisabgg.whateattoday;

import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;

import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;

import java.util.ArrayList;

class MyAdapterBig extends RecyclerView.Adapter<MyAdapterBig.MyViewHolder> {
    private ArrayList<Productos> frigos;

    public MyAdapterBig(ArrayList<Productos> frigos) {
        this.frigos = frigos;
    }

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

    @Override
    public void onBindViewHolder(@NonNull final MyViewHolder holder, int position) {
        Productos object = frigos.get(position);

        String firstText = object.getNombre();

        holder.text1.setText(firstText);

        holder.delete.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                final String name = holder.text1.getText().toString();
                holder.myRef.addValueEventListener(new ValueEventListener() {
                    @Override
                    public void onDataChange(DataSnapshot dataSnapshot) {

                        Log.d("SDASDASDASDASDASD ", "" + dataSnapshot.getChildren().toString());
                        for (DataSnapshot prodSnapshot : dataSnapshot.getChildren()) {
                            Log.d("SDASDASDASDASDASD ", "" + "12312313123123123123");
                            if (prodSnapshot.getValue(Productos.class).getNombre().equals(name)) {
                                Productos prod = prodSnapshot.getValue(Productos.class);
                                prodSnapshot.getRef().removeValue();
                                Log.d("Delete:", prod.toString());
                                frigos.remove(prod);
                                notifyDataSetChanged();
                            }
                        }
                    }

                    @Override
                    public void onCancelled(DatabaseError error) {
                        // Failed to read value
                        Log.w("Error", "Failed to read value.", error.toException());
                    }
                });
            }
        });

    }

    @Override
    public int getItemCount() {
        return frigos.size();
    }


    public class MyViewHolder extends RecyclerView.ViewHolder {
        TextView text1;
        Button delete;
        FirebaseDatabase database = FirebaseDatabase.getInstance();
        DatabaseReference myRef = database.getReference("bigFrigos");

        MyViewHolder(View itemView) {
            super(itemView);
            text1 = (TextView) itemView.findViewById(R.id.text1);
            delete = (Button) itemView.findViewById(R.id.delete);

        }
    }

}

On the other hand this works wonderfully ....

package com.virtualmon.sergisabgg.whateattoday;

import android.support.annotation.NonNull;
import android.support.v7.widget.RecyclerView;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.TextView;

import com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.firebase.database.ValueEventListener;

import java.util.ArrayList;

class MyAdapterSmall extends RecyclerView.Adapter<MyAdapterSmall.MyViewHolder> {
    private ArrayList<Productos> frigos;

    public MyAdapterSmall(ArrayList<Productos> arrayList) {
        frigos = arrayList;
    }

    @Override
    public void onAttachedToRecyclerView(RecyclerView recyclerView) {
        super.onAttachedToRecyclerView(recyclerView);
    }

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

    @Override
    public void onBindViewHolder(@NonNull final MyViewHolder holder, final int position) {
        Productos object = frigos.get(position);

        String firstText = object.getNombre();

        holder.text1.setText(firstText);

        holder.delete.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                final String name = holder.text1.getText().toString();
                holder.myRef.addValueEventListener(new ValueEventListener() {
                    @Override
                    public void onDataChange(DataSnapshot dataSnapshot) {
                        for (DataSnapshot prodSnapshot : dataSnapshot.getChildren()) {
                            if (prodSnapshot.getValue(Productos.class).getNombre().equals(name)) {
                                Productos prod = prodSnapshot.getValue(Productos.class);
                                prodSnapshot.getRef().removeValue();
                                Log.d("Delete:", prod.toString());
                                frigos.remove(prod);
                                notifyDataSetChanged();
                            }
                        }
                    }

                    @Override
                    public void onCancelled(DatabaseError error) {
                        // Failed to read value
                        Log.w("Error", "Failed to read value.", error.toException());
                    }
                });
            }
        });
    }


    @Override
    public int getItemCount() {
        return frigos.size();
    }


    public class MyViewHolder extends RecyclerView.ViewHolder {
        TextView text1;
        Button delete;
        FirebaseDatabase database = FirebaseDatabase.getInstance();
        DatabaseReference myRef = database.getReference("smallFrigo");

        MyViewHolder(View itemView) {
            super(itemView);
            text1 = (TextView) itemView.findViewById(R.id.text1);
            delete = (Button) itemView.findViewById(R.id.delete);

        }
    }

}

Thank you very much. Best regards.

    
asked by Sergislabgg 07.04.2018 в 00:30
source

1 answer

0

It is important to make sure that the reference "bigFrigos" exists, this is called in the Adapter that you comment does not work:

DatabaseReference myRef = database.getReference("bigFrigos");

and you do not need to overwrite the method:

  @Override
        public void onAttachedToRecyclerView(RecyclerView recyclerView) {
            super.onAttachedToRecyclerView(recyclerView);
        }   
    
answered by 07.04.2018 / 01:14
source