Ich verwende die von Android Studio bereitgestellte Klasse für eine Aktivität mit Registerkarten, die Aktionsleistenregisterkarten mit ViewPager verwendet. In dieser Aktivität versuche ich, einen RecyclerView mit Daten aus einer Firebase-Datenbank zu initialisieren.Firebase + RecyclerView: RecyclerView wird beim Start der Anwendung nicht angezeigt
Problem: Beim ersten Start der App ist der RecyclerView leer, wie unten gezeigt.
Wenn ich die Anwendung innerhalb des Emulator schließen und wieder öffnen, mein RecyclerView bevölkert wird, wie es sollte, wie unten gezeigt.
Irgendwelche Ideen, warum dies geschieht könnte? Ich habe eine Theorie, aber ich konnte keine Lösung finden. Nachdem ich versucht habe, die Seite FragmentPagerAdapter zu lesen, hatte ich den Eindruck, dass die Fragmente statisch sein müssen (ich weiß nicht, welche Auswirkungen das haben könnte, also wenn jemand etwas Licht darauf werfen könnte, würde es geschätzt werden). Beim ersten Start der App wird der RecyclerView initialisiert. Es fügt dann die Daten aus der Firebase-Datenbank hinzu, aber da das RecyclerView bereits initialisiert wurde, ist es leer und wird nie richtig aktualisiert. Ich habe versucht, die notify ... Methoden vergebens zu rufen.
StudentFragment der onCreateView Methode:
private View view;
private Context c;
private RecyclerView mRecyclerView;
private LinearLayoutManager manager;
private Firebase mFirebaseRef;
private FirebaseRecyclerAdapter<Student, ViewHolder> firebaseRecyclerAdapter;
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
view = inflater.inflate(R.layout.fragment_students, container, false);
mFirebaseRef = new Firebase("<your Firebase link here>");
c = getContext();
//Initializes Recycler View and Layout Manager.
mRecyclerView = (RecyclerView) view.findViewById(R.id.studentRecyclerView);
manager = new LinearLayoutManager(c);
mRecyclerView.setHasFixedSize(true);
firebaseRecyclerAdapter =
new FirebaseRecyclerAdapter<Student, ViewHolder>(
Student.class,
R.layout.single_student_recycler,
ViewHolder.class,
mFirebaseRef
) {
@Override
protected void populateViewHolder(ViewHolder viewHolder, Student student, int i) {
viewHolder.vFirst.setText(student.getFirst());
viewHolder.vLast.setText(student.getLast());
viewHolder.vDue.setText(Double.toString(student.getCurrentlyDue()));
viewHolder.vRadio.setButtonTintList(ColorStateList.valueOf(Color.parseColor(student.getColor())));
Log.d(TAG, "populateViewHolder called");
}
};
mRecyclerView.setAdapter(firebaseRecyclerAdapter);
mRecyclerView.setLayoutManager(manager);
return view;
}
ViewHolder:
public static class ViewHolder extends RecyclerView.ViewHolder {
public final TextView vFirst;
public final TextView vLast;
public final TextView vDue;
public final RadioButton vRadio;
public ViewHolder(View itemView) {
super(itemView);
vFirst = (TextView) itemView.findViewById(R.id.recycler_main_text);
vLast = (TextView) itemView.findViewById(R.id.recycler_sub_text);
vRadio = (RadioButton) itemView.findViewById(R.id.recycler_radio_button);
vDue = (TextView) itemView.findViewById(R.id.recycler_due_text);
}
onCreate der Homescreen-Methode:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_homescreen);
// Create the adapter that will return a fragment for each of the three
// primary sections of the activity.
mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager());
// Set up the ViewPager with the sections adapter.
mViewPager = (ViewPager) findViewById(R.id.container);
mViewPager.setAdapter(mSectionsPagerAdapter);
TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs);
tabLayout.setupWithViewPager(mViewPager);
}
Firebase Kontext auf eine andere Anwendung festgelegt wird, sobald die Homescreen-Aktivität beginnt beginnt. Jede Hilfe wird geschätzt.
Bearbeiten: Ich graben durch die FirebaseUI GitHub Seite, wo das Problem am wahrscheinlichsten liegt, und fand einen anderen Benutzer mit genau dem gleichen Problem. Es scheint, dass OnBindViewHolder nicht nach NotifyItemInserted in der FirebaseRecyclerAdapter-Klasse aufgerufen wird. Nun, es zu beheben ...
Ich versuche, das gleiche wie Sie zu tun, aber kann es nicht funktionieren, hier ist mein Problem erklärt, falls Sie Zeit haben, es zu betrachten. Vielen Dank! https://stackoverflow.com/questions/38263758/populateviewholder-not-executing-with-firebaserecycleradapter-android – raphh