As described in the title; I find myself unable to get the desired fragment to update properly.
I have a fragment that shows notifications to the user, and it should be updated every time a document gets added to the class/database. However, when I delete the document manually from the database, the class does not seem to be updated and it shows the documents previously found in the database. Additionally, it does, however, show the current documents if I open and close the application.
Fragment:
public class NotificationFragment extends android.support.v4.app.Fragment {
private RecyclerView mNotificationList;
private NotificationsAdapter notificationsAdapter;
private List<Notifications> mNotifList;
private FirebaseFirestore mFirestore;
public NotificationFragment() {
// Required empty public constructor
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View v = inflater.inflate(R.layout.fragment_notification, container, false);
mNotifList = new ArrayList<>();
mNotificationList = (RecyclerView) v.findViewById(R.id.notification_list);
notificationsAdapter = new NotificationsAdapter(getContext(), mNotifList);
mNotificationList.setHasFixedSize(true);
mNotificationList.setLayoutManager(new LinearLayoutManager(container.getContext()));
mNotificationList.setAdapter(notificationsAdapter);
mFirestore = FirebaseFirestore.getInstance();
String current_user_id = FirebaseAuth.getInstance().getCurrentUser().getUid();
mFirestore.collection("Users").document(current_user_id).collection("Notifications").addSnapshotListener(requireActivity(), new EventListener<QuerySnapshot>() {
@Override
public void onEvent(QuerySnapshot documentSnapshots, FirebaseFirestoreException e) {
if (documentSnapshots != null && !documentSnapshots.isEmpty()) {
for (DocumentChange doc : documentSnapshots.getDocumentChanges()) {
if (doc.getType() == DocumentChange.Type.ADDED) {
Notifications notifications = doc.getDocument().toObject(Notifications.class);
mNotifList.add(notifications);
notificationsAdapter.notifyDataSetChanged();
}
}
}
}
});
return v;
}
Database Structure:
Use the below given method inside your NotificationsAdapter.class and then call this method instead of calling notifyDataSetChanged() directly in your Fragment. Actually you are not passing data to the Adapter that was the issue.
public void updateAdapter(ArrayList<Notifications> mDataList) {
this.mList = mDataList;
notifyDataSetChanged();
}