Iaroslav Siniugin
Iaroslav Siniugin

Reputation: 1046

Need retrieve data from FirebaseDatabase to Fragment

I'm developing simple project. CategoryFragment is the first added fragment in MainActivity. I expect receive data from FireBase and display it with RecyclerView.

Below my code. The app doesn't fall during launching. There is no any error. I guess I should use some method for my purpose, but I'm new in Firebase.

public class CategoryFragment extends Fragment {

    public DatabaseReference mRootDB;
    private RecyclerView mRecyclerView;
    public FirebaseRecyclerAdapter<Category, CategoryViewHolder> adapter;


    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        mRootDB = FirebaseDatabase.getInstance().getReference().child("categories");
        adapter = new FirebaseRecyclerAdapter <Category, CategoryViewHolder>(
                Category.class,
                R.layout.model_category,
                CategoryViewHolder.class,
                mRootDB)
        {
            @Override
            protected void populateViewHolder(CategoryViewHolder viewHolder, Category model, int position) {
                viewHolder.setCategory(model.getName());
            }
        };
        mRecyclerView.setAdapter(adapter);
    }

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.frag_category, container, false);

        mRecyclerView = (RecyclerView) rootView.findViewById(R.id.category_RV);

        return rootView;
    }


    public static class CategoryViewHolder extends RecyclerView.ViewHolder {

        View mView;
        TextView category_CV;

        public CategoryViewHolder(View itemView) {
            super(itemView);
            mView = itemView;
            category_CV = (TextView) mView.findViewById(R.id.category_CV);
        }

        public void setCategory(String data){
            category_CV.setText(data);
        }

    }
}

Upvotes: 0

Views: 1854

Answers (1)

Val Okafor
Val Okafor

Reputation: 3437

I would not override onActivityCreated() if I were you, you can create and return the RecyclerView in the onCreateView(). Are you sure you have data in Firebase? You can override parseSnapshot() like this and maybe put a break point to make sure that something is coming back, and if it does then you may want to check your RecyclerView custom layout.

public class CategoryFragment extends Fragment {

    public DatabaseReference mRootDB;
    private RecyclerView mRecyclerView;
    public FirebaseRecyclerAdapter<Category, CategoryViewHolder> adapter;



    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        View rootView = inflater.inflate(R.layout.frag_category, container, false);       

        mRecyclerView = (RecyclerView) rootView.findViewById(R.id.category_RV);
        mRootDB = FirebaseDatabase.getInstance().getReference().child("categories");
        adapter = new FirebaseRecyclerAdapter <Category, CategoryViewHolder>(
                Category.class,
                R.layout.model_category,
                CategoryViewHolder.class,
                mRootDB)
        {
            @Override
            protected Category parseSnapshot(DataSnapshot snapshot) {
                Category category = super.parseSnapshot(snapshot);
                if (category != null){
                    category.setId(snapshot.getKey());
                }
                return category;
            }

            @Override
            protected void populateViewHolder(CategoryViewHolder viewHolder, Category model, int position) {
                viewHolder.setCategory(model.getName());
            }
        };

        mRecyclerView.setAdapter(adapter);

        return rootView;
    }


    public static class CategoryViewHolder extends RecyclerView.ViewHolder {

        View mView;
        TextView category_CV;

        public CategoryViewHolder(View itemView) {
            super(itemView);
            mView = itemView;
            category_CV = (TextView) mView.findViewById(R.id.category_CV);
        }

        public void setCategory(String data){
            category_CV.setText(data);
        }

    }
}

Upvotes: 1

Related Questions