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();
}
If you want to remove any data set you have to set notifyItemRemoved with position of the data.
Example:
mDataset.remove(position); // remove your data
notifyItemRemoved(position); // notify that your data is removed
notifyItemRangeChanged(position, mDataSet.size()); // you can use if range is changed
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.