I am adding item to recycler view using firebase with MVVM. Problem i am facing is when the child is added in Firebase then they are updated to recycler view and there is change in UI, but when i remove item from firebase but there is no change in UI, the deleted is removed from Recycler view. So how can i update adapter when OnChildRemoved is called in Repo class?
Thanks
HomeFragment class
HomeFragment extends Fragment {
RecyclerView RecyclerView;
public ShowMemeAdapter memeAdapter;
private HomeFragmentViewModel homeFragmentViewModel;
public HomeFragment() {
// Required empty public constructor
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View root = inflater.inflate(R.layout.fragment_home, container, false);
RecyclerView = root.findViewById(R.id.recyclerViewMeme);
return root;
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
homeFragmentViewModel = new ViewModelProvider(requireActivity()).get(HomeFragmentViewModel.class);
homeFragmentViewModel.init();
memeAdapter = new ShowMemeAdapter(requireActivity(),homeFragmentViewModel.getMemeData().getValue());
homeFragmentViewModel.getMemeData().observe(getViewLifecycleOwner(), new Observer<ArrayList<MemeData>>() {
@Override
public void onChanged(ArrayList<MemeData> memeData) {
RecyclerView.setLayoutManager(new GridLayoutManager(getActivity(), 3));
RecyclerView.setAdapter(memeAdapter);
memeAdapter.loadData(memeData);
memeAdapter.notifyDataSetChanged();
}
});
}
Repository Class
public class Repo {
static Repo instance;
private ArrayList<MemeData> memeDataLs = new ArrayList<>();
private MutableLiveData<ArrayList<MemeData>> memeData = new MutableLiveData<>();
ChildEventListener childEventListener;
DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference("Data/XXX/");
public static Repo getInstance(){
if(instance==null)
instance = new Repo();
return instance;
}
public MutableLiveData<ArrayList<MemeData>> getData(){
childEventListener = databaseReference.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(@NonNull DataSnapshot snapshot, String previousChildName) {
MemeData memeDetails = snapshot.getValue(MemeData.class);
memeDataLs.add(0,memeDetails);
memeData.setValue(memeDataLs);
}
@Override
public void onChildChanged(@NonNull DataSnapshot snapshot, String previousChildName) {
}
@Override
public void onChildRemoved(@NonNull DataSnapshot snapshot) {
}
@Override
public void onChildMoved(@NonNull DataSnapshot snapshot, String previousChildName) {
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
}
});
return memeData;
}
ViewModel Class
public class HomeFragmentViewModel extends ViewModel implements LifecycleObserver {
private MutableLiveData<ArrayList<MemeData>> memeData;
public Repo repo;
public void init() {
if(memeData!=null){
return;
}
repo = new Repo();
}
public HomeFragmentViewModel(){
memeData = Repo.getInstance().getData();
}
public LiveData<ArrayList<MemeData>> getMemeData() {
return memeData;
}