Ich hätte gerne eine RecyclerView
zeigen zufällige Fragen an die Benutzer. Sobald die Frage beantwortet wurde (wright oder wrong), sollte sie für diesen Benutzer nie wieder erscheinen, selbst wenn er die App schließt. Danach wird die Aktivität neu geladen und eine neue zufällige Frage erscheint.Firebase: Zeige Artikel nur einmal für jeden Benutzer mit RecyclerView
Wenn die Benutzer alle Fragen in der Datenbank sehen, sollte eine Meldung angezeigt werden, dass es zu diesem Zeitpunkt keine Fragen mehr gibt.
Mein Code befindet sich gerade in Firebase
Datenbank, wenn der Benutzer die Frage nach dem Klick sah.
Ich habe versucht, eine if
Aussage (aber es scheint eine dumme Idee) und es funktioniert für eine kurze Zeit. Grundsätzlich heißt es, wenn das Kind existiert, lade die Aktivität neu. Wenn die Datenbank tausende von Fragen enthält, funktioniert es für einen bestimmten Zeitraum, wird aber eines Tages abstürzen.
Meine Probleme:
Zuerst möchte ich nicht die Aktivität n-mal nachladen eine Frage zu „finden“, die noch nicht angezeigt hat.
Zweitens kann ich nicht feststellen, wenn die Benutzer alle Fragen sehen, um eine Nachricht anzuzeigen. Hier
ist der Code:
mDatabase = FirebaseDatabase.getInstance().getReference().child("Category").child(category_key).child("Questions");
query = mDatabase.orderByChild("randomId").startAt(randomValue).limitToFirst(1);
@Override
protected void onStart() {
super.onStart();
FirebaseRecyclerAdapter<Questions, QuestionViewHolder>
firebaseRecyclerAdapter = new FirebaseRecyclerAdapter<Photos, QuestionViewHolder>(
Question.class,
R.layout.question_grid,
QuestionViewHolder.class,
query
) {
@Override
protected void populateViewHolder(final QuestionViewHolder viewHolder, final Question model, int position) {
final String question_key = getRef(position).getKey();
final String category_key = getIntent().getExtras().getString("category_id");
mDatabase.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.child(question_key).child("ViwedBy").hasChild(mAuth.getCurrentUser().getUid())) {
finish();
startActivity(getIntent());
} else {
viewHolder.setQuestion(model.getQuestion());{
@Override
public void onClick (View v){
mDatabaseLike.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
mDatabaseTest = FirebaseDatabase.getInstance().getReference().child("Category").child(category_key).child("Questions").child(question_key).child("ViewedBy").child(mAuth.getCurrentUser().getUid());
mDatabaseTest.setValue(true);
finish();
startActivity(getIntent());
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
}
}
}
}
@Override
public void onCancelled (DatabaseError databaseError){
}
});
mQuestionsList.setAdapter(firebaseRecyclerAdapter);
}
Gibt es eine intelligentere Art und Weise, es zu tun?
Zusätzliche Frage: Muss ich die gesamte Aktivität neu laden, oder gibt es eine Möglichkeit, nur den RecyclerView neu zu laden?
Erstmal Danke für Ihre Hilfe! Wenn ich versuche, FirebaseRecyclerAdapter durch FirebaseIndexRecyclerAdapter zu ersetzen, wird es nicht implementiert. Ich konnte keine Dokumentation über IndexedFirebaseRecyclerAdapter finden. Was mache ich falsch? –
Stellen Sie sicher, dass diese Bibliothek installiert ist https://github.com/firebase/FirebaseUI-Android/blob/master/database/README.md – Linxy
Vielen Dank! Es funktioniert! –