0

I have data in realtime database and I am trying to display that data in fragment which has a recycler view. But data is not populated. Even populateView method is not triggred(I tried logging it). It loads well in activity but not in fragment. Can anyone help?

public class ExtraFragment extends Fragment {
    RecyclerView recyclerView;
    TextView clickLink;
    DatabaseReference databaseReference;
    FirebaseRecyclerAdapter<ExtraBeans,MyViewHolder> recyclerAdapter;

    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {




        View v = inflater.inflate(R.layout.fragment_extra, null, false);
        recyclerView = (RecyclerView) v.findViewById(R.id.recyclerView);




        clickLink = (TextView) v.findViewById(R.id.clickLink);
        databaseReference = FirebaseDatabase.getInstance().getReferenceFromUrl("https://myeg-7g8990.firebaseio.com/sim/my data");
        Log.v("adslquestion","mhere"+"");





                 recyclerAdapter= new FirebaseRecyclerAdapter<ExtraBeans,MyViewHolder>

                         (ExtraBeans.class,
                        R.layout.options_extra,
                        MyViewHolder.class,
                        databaseReference) {

            @Override
            protected void populateViewHolder(MyViewHolder viewHolder, ExtraBeans model, int position) {


                viewHolder.setQuestion(model.getQuestion());
                viewHolder.setAnswer(model.getAnswer());
                viewHolder.setWinner(model.getWinner());
                Log.v("adslquestion",model.getQuestion()+"");


            }




        };
        recyclerView.setAdapter(recyclerAdapter);
   recyclerAdapter.notifyDataSetChanged();
        databaseReference.keepSynced(true);
                    }
                }
        );


        return v;
    }


  public static  class MyViewHolder extends RecyclerView.ViewHolder{
        TextView question;
        TextView answer;
        TextView winner;
        View mView;

        public MyViewHolder(View itemView) {

            super(itemView);
            mView=itemView;

            Log.v("adslquestion","aarko ma");
        }

        public void setQuestion(String questionString)
        {
            question=(TextView)mView.findViewById(R.id.question);
            question.setText(questionString);



        }
        public void setAnswer(String answerString)
        {
            answer=(TextView)mView.findViewById(R.id.answer);
            answer.setText(answerString);




        }

        public void setWinner(String winnerString)
        {
            winner=(TextView)mView.findViewById(R.id.winner);
            winner.setText(winnerString);



        }
    }
AL.
  • 36,815
  • 10
  • 142
  • 281

1 Answers1

2

I recommend you to either use activity instead of fragments. I indirectly contacted firebase developers team for it and found that there are some errors in using recycler adapter for firebase in fragments. If you force that you want to use fragment then may be I have something for you. Use list view and I have modified the code for you

@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {

    View v = inflater.inflate(R.layout.fragment_extra, null, false);
    listView = (ListView) v.findViewById(R.id.listView);

    clickLink = (TextView) v.findViewById(R.id.clickLink);
    databaseReference = FirebaseDatabase.getInstance().getReferenceFromUrl("https://data-your.value.com/etc");

    listAdapter = new FirebaseListAdapter<ExtraBeans>(getActivity(), ExtraBeans.class, R.layout.options_extra, databaseReference) {
        TextView question;
        TextView answer;
        TextView winner;
        TextView detail;

        @Override
        protected void populateView(View v, ExtraBeans model, int position) 
        {
            answer = (TextView) v.findViewById(R.id.answer);
            question = (TextView) v.findViewById(R.id.question);
            winner = (TextView) v.findViewById(R.id.winner);
            detail = (TextView) v.findViewById(R.id.detail);

            question.setText(model.getQuestion());
            answer.setText(model.getAnswer());
            winner.setText("Winner- " + model.getWinner());
            detail.setText(model.getDetail());
        }
    };
    listView.setAdapter(listAdapter);
    listAdapter.notifyDataSetChanged();
    databaseReference.keepSynced(true);

    return v;
}

You can even create view holder yourself for smooth scroll. Let me know if this code helps you.

mmgross
  • 3,064
  • 1
  • 23
  • 32
  • thanx working but its bad that I also got reply from google developers that there is problem in recycler adapter in firebase while using fragments. – hamrodoko1 doko May 09 '17 at 07:35