FILL IN MULTIPLE RECYCLERVIEW WITH FIREBASE, ERROR ANDROID STUDIO

0

I have a problem filling the recyclerview through firebase , I have 3 adapters, two horizontal adapters (one filled with firebase and another directly from the code android studio), and an adapter that orders the two adapters mentioned in the fragment . The problem lies when trying to call the downloaded data from firebase (the downloaded data if stored in the function getHorizontal1Data ), in the function getObject() . Which generates this error

Caused by: java.lang.IndexOutOfBoundsException: Invalid index 0, size is 0

I attach the code, I hope you can help me. Greetings

CODE OF HOMEFRAGMENT

 public class HomeFragment extends Fragment {
    private RecyclerView recyclerView;
    private RecyclerView.LayoutManager layoutManager;
    private HomeAdapter adapter;
    private ArrayList<Object> objects = new ArrayList<>();
    //private DatabaseReference base1;
    //private List<SingleHorizontal1> data1;
    private static ArrayList data1 = new ArrayList<SingleHorizontal1>();
    //private static List<List<String>> data2;

    public HomeFragment() {
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fragment_home, container, false);
        // getData1();
        Log.d("jaja", "Tamano de data1 segundo check" + " / " + data1.size());
        recyclerView = (RecyclerView) view.findViewById(R.id.recyclerView);
        recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
        adapter = new HomeAdapter(getContext(), getObject());
        recyclerView.setAdapter(adapter);
        return view;
    }


    private ArrayList<Object> getObject() {
        objects.clear();
        if (getHorizontal1Data().size() != 0) {
            objects.add(getHorizontal1Data().get(0));
        } else {
            objects.add(getHorizontal1Data().get(0));
            objects.add(getHorizontal2Data().get(0));
            Log.d("jaja", ""+ getHorizontal1Data().size());
        }
        //objects.add(getHorizontal1Data().get(0));
        //objects.add(getHorizontal2Data().get(0));
        return objects;
    }


    private ArrayList<Object> getObjectOtro() {
        objects.clear();
        //objects.add(getHorizontal1Data().get(0));
        objects.add(getHorizontal2Data().get(0));
        return objects;
    }

    /*
    public static ArrayList<SingleHorizontal1> getHorizontal1Data() {
        ArrayList<SingleHorizontal1> singleHorizontals1 = new ArrayList<>();
        singleHorizontals1.add(new SingleHorizontal1("Chifa", Integer.toString(R.drawable.chifa)));
        singleHorizontals1.add(new SingleHorizontal1("Pollo", Integer.toString(R.drawable.pollo)));
        singleHorizontals1.add(new SingleHorizontal1("Chaufa", Integer.toString(R.drawable.chifa)));
        return singleHorizontals1;
    }
    */

    public static ArrayList<SingleHorizontal2> getHorizontal2Data() {
        ArrayList<SingleHorizontal2> singleHorizontals2 = new ArrayList<>();
        singleHorizontals2.add(new SingleHorizontal2("Chifa", R.drawable.chifa));
        singleHorizontals2.add(new SingleHorizontal2("Pollo", R.drawable.pollo));
        singleHorizontals2.add(new SingleHorizontal2("Chaufa", R.drawable.chifa));
        return singleHorizontals2;
    }

    public static ArrayList<SingleHorizontal1> getHorizontal1Data() {
        data1 = new ArrayList<>();
        //data2 = new ArrayList<>();
        FirebaseDatabase database = FirebaseDatabase.getInstance();
        database.getReference("Negocios").addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                //data1.removeAll(data1);
                // data2.removeAll(data2);
                for (DataSnapshot snapshot : dataSnapshot.getChildren()) {
                    //data2.removeAll(data2);
                    String name = snapshot.child("name").getValue(String.class);
                    String imgBackground = snapshot.child("imgBackground").getValue(String.class);
                    //double timestamp = ds.child("timestamp").getValue(Double.class);
                    Log.d("TAG", name + " / " + imgBackground);
                    data1.add(new SingleHorizontal1(name, imgBackground));
                    //data1.add(0, new SingleHorizontal1(name, imgBackground));
                    Log.d("TAG", "Tamano de data1" + " / " + data1.size());
                    //objects.add(data1);
                    //SingleHorizontal1 data2 = new SingleHorizontal1(name, imgBackground);
                    //data1.add(data2);
                    //objects.add(data2);
                }

                //objects.add(data1.get(0));
                Log.d("TAG", "Data1" + " / " + data1.get(0));
                //Log.d("TAG", "objects" + " / " + objects);
            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });
        return data1;
    }
}

CODE OF THE ADAPTER OF THE TWO ADAPTERS IN THE FRAGMENT

package com.example.kevin.deliapp.activities.adapterHome;

import android.content.Context;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.content.Intent;
import android.util.Log;
import com.example.kevin.deliapp.R;
import com.example.kevin.deliapp.activities.activitiesHome.InformationActivity;
import com.example.kevin.deliapp.activities.modelHome.SingleHorizontal1;
import com.example.kevin.deliapp.activities.modelHome.SingleHorizontal2;
import java.util.ArrayList;
import static com.example.kevin.deliapp.activities.fragments.HomeFragment.getHorizontal1Data;
import static com.example.kevin.deliapp.activities.fragments.HomeFragment.getHorizontal2Data;
public class HomeAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
    private Context context;
    private ArrayList<Object> items;
    private final int HORIZONTAL1 = 1;
    private final int HORIZONTAL2 = 2;
    private OnItemClickListener listener;

    public HomeAdapter(Context context, ArrayList<Object> items) {
        this.context = context;
        this.items = items;
    }

    public HomeAdapter(Context context, ArrayList<Object> items, OnItemClickListener listener) {
        this.context = context;
        this.items = items;
        this.listener = listener;
    }

    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        LayoutInflater inflater = LayoutInflater.from(context);
        View view;
        RecyclerView.ViewHolder holder;
        switch (viewType) {
            case HORIZONTAL1:
                view = inflater.inflate(R.layout.horizontal1, parent, false);
                holder = new Horizontal1ViewHolder(view);
                break;
            case HORIZONTAL2:
                view = inflater.inflate(R.layout.horizontal2, parent, false);
                holder = new Horizontal2ViewHolder(view);
                break;

            default:
                view = inflater.inflate(R.layout.horizontal1, parent, false);
                holder = new Horizontal1ViewHolder(view);
                break;
        }
        return holder;
    }

    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
        if (holder.getItemViewType() == HORIZONTAL1)
            horizontal1View((Horizontal1ViewHolder) holder);
        else if (holder.getItemViewType() == HORIZONTAL2)
            horizontal2View((Horizontal2ViewHolder) holder);
    }

    private void horizontal1View(Horizontal1ViewHolder holder) {
        //ESTO ES PARA CUANDO AGREGUE LA OPCION DE TOCAR EL CARDVIEW Y ABRIR OTRA VENTANA
        HorizontalAdapter1 adapter1 = new HorizontalAdapter1(getHorizontal1Data(), R.layout.horizontal1_single_row, context, new HorizontalAdapter1.OnItemClickListener() {
            @Override
            public void onItemClick(SingleHorizontal1 data, int position) {
                //Falta agregar accion
                java.lang.String v = "hola";
                Log.d("hola", ""+ v);
                //adapter1.notifyItemChanged(position);
                Intent intent = new Intent(context, InformationActivity.class);
                //intent.putExtra("id", girl.getId());
                intent.putExtra("img1", data.getImgBackground());
                intent.putExtra("name", data.getName());
                context.startActivity(intent);
            }
        });


        /*
        HorizontalAdapter1 adapter1 = new HorizontalAdapter1(getHorizontal1Data(), new HorizontalAdapter1.OnItemClickListener() {
            @java.lang.Override
            public void onItemClick(SingleHorizontal1 data, int position) {
                java.lang.String v = "hola";
                Log.d("hola", ""+ v);
                //adapter.notifyItemChanged(position);
                Intent intent = new Intent(context, InformationActivity.class);
                //intent.putExtra("id", girl.getId());
                intent.putExtra("img1", data.getImgBackground());
                context.startActivity(intent);
                //   startActivity(intent);
            }
        });
        */

        holder.recyclerView.setLayoutManager(new LinearLayoutManager(context, LinearLayoutManager.HORIZONTAL, false));
        holder.recyclerView.setAdapter(adapter1);
    }

    private void horizontal2View(Horizontal2ViewHolder holder) {
        HorizontalAdapter2 adapter = new HorizontalAdapter2(getHorizontal2Data());
        holder.recyclerView.setLayoutManager(new LinearLayoutManager(context, LinearLayoutManager.HORIZONTAL, false));
        holder.recyclerView.setAdapter(adapter);
    }

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

    @Override
    public int getItemViewType(int position) {
        if (items.get(position) instanceof SingleHorizontal1)
            return HORIZONTAL1;
        if (items.get(position) instanceof SingleHorizontal2)
            return HORIZONTAL2;
        return -1;
    }

    public class Horizontal1ViewHolder extends RecyclerView.ViewHolder {
        RecyclerView recyclerView;
        Horizontal1ViewHolder(View itemView) {
            super(itemView);
            recyclerView = (RecyclerView) itemView.findViewById(R.id.inner_recyclerView);
        }
    }

    public class Horizontal2ViewHolder extends RecyclerView.ViewHolder {
        RecyclerView recyclerView;
        Horizontal2ViewHolder(View itemView) {
            super(itemView);
            recyclerView = (RecyclerView) itemView.findViewById(R.id.inner_recyclerView);
        }
    }

    public interface OnItemClickListener {
        void onItemClick(SingleHorizontal1 data, int position);
    }
}

FIRST ADAPTER

    public class HorizontalAdapter1 extends RecyclerView.Adapter<HorizontalAdapter1.ViewHolder> {
    private List<SingleHorizontal1> data;
    private int layout;
    private Context context;
    private OnItemClickListener listener;
    private OnItemClickListener listenerFavorite;
    private OnButtonClickListener btnClickListener;

    public HorizontalAdapter1(List<SingleHorizontal1> data, int layout, Context context, OnItemClickListener listener, OnButtonClickListener btnListener) {
        this.data = data;
        this.layout = layout;
        this.context = context;
        this.listener = listener;
        this.btnClickListener = btnListener;
    }

    public HorizontalAdapter1(List<SingleHorizontal1> data, int layout, Context context, OnItemClickListener listener) {
        this.data = data;
        this.layout = layout;
        this.context = context;
        this.listener = listener;
    }

    public HorizontalAdapter1(List<SingleHorizontal1> data) {
        this.data = data;
    }

    public HorizontalAdapter1(List<SingleHorizontal1> data, OnItemClickListener listener) {
        this.data = data;
        this.listener = listener;
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.horizontal1_single_row, parent, false);
        ViewHolder vh = new ViewHolder(v);
        return vh;
    }

    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        holder.bind(data.get(position), listener, btnClickListener);
    }

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

    public class ViewHolder extends RecyclerView.ViewHolder {
        public TextView textViewName;
        public ImageView imageViewBackground;
        public ViewHolder(View itemView) {
            super(itemView);
            textViewName = (TextView) itemView.findViewById(R.id.textViewName);
            imageViewBackground = (ImageView) itemView.findViewById(R.id.imageViewBackground);
        }

        public void bind(final SingleHorizontal1 data, final OnItemClickListener listener, final OnButtonClickListener btnListener) {
            this.textViewName.setText(data.getName());
            // Cargamos la imagen con Picasso
            Picasso.with(context).load(Integer.parseInt(data.getImgBackground())).fit().into(this.imageViewBackground);
            //this.imageViewBackground.setImageResource(Integer.parseInt(data.getImgBackground()));
            //Picasso.with(context).load(data.getImgBackground()).fit().into(this.imageViewBackground);
            // Añadimos el listener click para cada elemento fruta
            this.imageViewBackground.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    listener.onItemClick(data, getAdapterPosition());
                }
            });
        }
    }


    public interface OnItemClickListener {
        void onItemClick(SingleHorizontal1 data, int position);
    }

    public interface OnButtonClickListener {
        void onButtonClick(SingleHorizontal1 data, int position);
    }

    public void setFilter(ArrayList<SingleHorizontal1> data) {
        this.data = new ArrayList<>();
        this.data.addAll(data);
        notifyDataSetChanged();
    }

}

SECOND ADAPTER

    public class HorizontalAdapter2 extends RecyclerView.Adapter<HorizontalAdapter2.ViewHolder> {
    private List<SingleHorizontal2> data;
    private int layout;
    private Context context;
    private OnItemClickListener listener;
    private OnItemClickListener listenerFavorite;
    private OnButtonClickListener btnClickListener;


    public HorizontalAdapter2(List<SingleHorizontal2> data, int layout, Context context, OnItemClickListener listener, OnButtonClickListener btnListener) {
        this.data = data;
        this.layout = layout;
        this.context = context;
        this.listener = listener;
        this.btnClickListener = btnListener;
    }

    public HorizontalAdapter2(List<SingleHorizontal2> data) {
        this.data = data;
    }

    @Override
    public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.horizontal2_single_row, parent, false);
        ViewHolder vh = new ViewHolder(v);
        return vh;
    }

    @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
        holder.bind(data.get(position), listener, btnClickListener);
    }

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

    public class ViewHolder extends RecyclerView.ViewHolder {
        public TextView textViewName;
        public ImageView imageViewBackground;
        public ViewHolder(View itemView) {
            super(itemView);
            textViewName = (TextView) itemView.findViewById(R.id.textViewName);
            imageViewBackground = (ImageView) itemView.findViewById(R.id.imageViewBackground);
        }

        public void bind(final SingleHorizontal2 data, final OnItemClickListener listener, final OnButtonClickListener btnListener) {
            this.textViewName.setText(data.getName());
            // Cargamos la imagen con Picasso
            //Picasso.with(context).load(data.getImgBackground()).fit().into(this.imageViewBackground);
            this.imageViewBackground.setImageResource(data.getImgBackground());
            // Añadimos el listener click para cada elemento fruta
            this.imageViewBackground.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    listener.onItemClick(data, getAdapterPosition());
                }
            });
        }
    }

    public interface OnItemClickListener {
        void onItemClick(SingleHorizontal2 data, int position);
    }

    public interface OnButtonClickListener {
        void onButtonClick(SingleHorizontal2 data, int position);
    }

    public void setFilter(ArrayList<SingleHorizontal2> data) {
        this.data = new ArrayList<>();
        this.data.addAll(data);
        notifyDataSetChanged();
    }

}

CLASS MODEL OF THE ADAPTERS, COUNT ON THE SAME DATA

    public class SingleHorizontal1 {

    //@Required
    private String name;
    //@Required
    private String imgBackground;

    public SingleHorizontal1() {

    }

    public SingleHorizontal1(String name, String imgBackground) {
        this.name = name;
        this.imgBackground = imgBackground;
    }

    public String getName() {
        return name;
    }

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

    public String getImgBackground() {
        return imgBackground;
    }

    public void setImgBackground(String imgBackground) {
        this.imgBackground = imgBackground;
    }

}
    
asked by Kevin 23.11.2018 в 00:10
source

0 answers