fragment- firebaserecycler adapter is not working on fragment

不问归期 提交于 2020-01-17 06:52:23

问题


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);



        }
    }

回答1:


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.



来源:https://stackoverflow.com/questions/43851451/fragment-firebaserecycler-adapter-is-not-working-on-fragment

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!