У меня есть код, который должен обновить пользовательский интерфейс со всеми данными в Cloud Firestore в коллекции, а затем обновить пользовательский интерфейс при добавлении элемента.Я использовал Recycler для добавления дополнительных данных:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_events);
ButterKnife.bind(this);
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
collection_events
.get()
.addOnCompleteListener(new OnCompleteListener<QuerySnapshot>()
{
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful()) {
for (QueryDocumentSnapshot snapshot:
Objects.requireNonNull(task.getResult())){
EventsCurrent eventsCurrent =
snapshot.toObject(EventsCurrent.class);
eventsCurrent.setId(snapshot.getId());
Log.d(TAG,snapshot.getId());
eventsCurrentList.add(eventsCurrent);
}
LinearLayoutManager linearLayoutManager = new
LinearLayoutManager(getApplicationContext());
eventsAdapter = new
EventsAdapter(EventsActivity.this,eventsCurrentList);
eventsAdapter.setEventsCurrents(eventsCurrentList);
recylerview_events.setLayoutManager(linearLayoutManager);
recylerview_events.setHasFixedSize(true);
recylerview_events.setAdapter(eventsAdapter);
isFirstTime = false;
}else {
Log.d(TAG, "Error getting documents: ",
task.getException());
}
}
});
db.collection("current_events")
.addSnapshotListener(new EventListener<QuerySnapshot>() {
@Override
public void onEvent(@Nullable QuerySnapshot
queryDocumentSnapshots, @Nullable FirebaseFirestoreException e) {
if (e != null) {
Log.w(TAG, "listen:error", e);
return;
}
for(DocumentChange dc:
queryDocumentSnapshots.getDocumentChanges()){
switch (dc.getType()){
case ADDED:
if (!isFirstTime) {
eventsAdapter.addEvent(dc.getDocument().toObject(EventsCurrent.class));
eventsAdapter.notifyItemInserted(eventsAdapter.numberOfevents());
}
break;
case MODIFIED:
eventsAdapter.notifyDataSetChanged();
break;
}
}
}
});
}
Здесь я использую и get()
& addSnapshotListener()
, так что я первоначально получаю все данные через get()
, а обновленные или добавленные данные через addSnapshotListener()
.
Проблема, при которой вызывается слушатель, и мои данные удваиваются, а данные заполняются дважды.
Кто-нибудь может мне помочь?