片段 - 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;
}
您甚至可以自己创建视图持有者以实现平滑滚动。
如果此代码对您有帮助,请告诉我。
我在实时数据库中有数据,我试图在具有回收器视图的片段中显示该数据。但数据未填充。甚至没有触发 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;
}
您甚至可以自己创建视图持有者以实现平滑滚动。 如果此代码对您有帮助,请告诉我。