Я хочу иметь RecyclerView
, показывая случайные вопросы пользователям. После ответа на вопрос (неправильный или неправильный) он никогда не должен появляться для этого пользователя снова, даже если он закрывает приложение. После этого активность перезагружается и появляется новый случайный вопрос.Firebase: Показывать только элементы для каждого пользователя с помощью RecyclerView
Когда пользователи видят все вопросы в базе данных, он должен показать сообщение о том, что в то время больше нет вопросов.
Мой код прямо сейчас помещается в базу данных Firebase
, если пользователь увидел вопрос после нажатия.
Я попытался поставить заявление if
(но это кажется глупой идеей), и он работает на короткое время. В основном он говорит, что если ребенок существует, перезагрузите его. Когда в базе данных задаются тысячи вопросов, она будет работать некоторое время, но однажды произойдет сбой.
Мои проблемы:
Во-первых, я не хочу, чтобы перезагрузить активность п раз «найти» вопрос, который до сих пор не появляется.
Во-вторых, я не могу определить, когда пользователи видят все вопросы, чтобы показать сообщение.
Вот код:
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);
}
Есть ли разумный способ сделать это?
Дополнительный вопрос: Нужно ли мне перезагрузить всю деятельность или есть способ перезагрузить только RecyclerView?
Прежде всего спасибо за вашу помощь! Когда я пытаюсь заменить FirebaseRecyclerAdapter FirebaseIndexRecyclerAdapter, он не реализуется. Я не смог найти документацию о IndexedFirebaseRecyclerAdapter. Что я делаю не так? –
Убедитесь, что у вас установлена эта библиотека https://github.com/firebase/FirebaseUI-Android/blob/master/database/README.md – Linxy
Спасибо! Работает! –