片段 - firebaserecycler 适配器不适用于片段

fragment- firebaserecycler adapter is not working on fragment

我在实时数据库中有数据,我试图在具有回收器视图的片段中显示该数据。但数据未填充。甚至没有触发 populateView 方法(我尝试记录它)。它在 activity 中加载良好,但在片段中加载不佳。有人可以帮忙吗?

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



        }
    }

我建议您使用 activity 而不是片段。我为此间接联系了firebase开发团队,发现在fragments中使用recycler adapter for firebase存在一些错误。如果你强迫你想使用片段,那么我可能会为你准备一些东西。使用列表视图,我已经为您修改了代码

@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;
}

您甚至可以自己创建视图持有者以实现平滑滚动。 如果此代码对您有帮助,请告诉我。