I have the codes below to load and filter the data from Firebase Firestore to a recycle view that Loads all the Filtered data, everything is working fine , but , when I go delete the selected item from the searched list, it does delete from the Firestore data on the web but still loaded by the Search recycle view after been deleted , looks like the Adatper still have the Data and didn't remove it after been deleted , please take a look to the codes Below in both deletenote() and getnotes() methods :-
package com.example.boc.main;
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.blogspot.atifsoftwares.animatoolib.Animatoo;
import com.example.boc.PhoneNumbers.NoteRecyclerViewAdapter;
import com.example.boc.PhoneNumbers.ViewNoteDialog;
import com.example.boc.models.Search;
import com.example.boc.search.SearchRecyclerViewAdapter;
import com.example.boc.R;
import com.example.boc.Interface.IMainActivity;
import com.google.android.material.floatingactionbutton.FloatingActionButton;
import com.google.android.material.snackbar.Snackbar;
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.Menu;
import android.view.View;
import android.view.WindowManager;
import android.widget.EditText;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.firestore.CollectionReference;
import com.google.firebase.firestore.DocumentReference;
import com.google.firebase.firestore.DocumentSnapshot;
import com.google.firebase.firestore.FirebaseFirestore;
import com.google.firebase.firestore.Query;
import com.google.firebase.firestore.QueryDocumentSnapshot;
import com.google.firebase.firestore.QuerySnapshot;
import java.util.ArrayList;
import com.example.boc.models.Note;
/**
* Created by User on 5/14/2018.
*/
public class Search_test extends AppCompatActivity implements
View.OnClickListener,
IMainActivity,
SwipeRefreshLayout.OnRefreshListener {
private static final String TAG = "MainActivity";
//Firebase
private FirebaseAuth.AuthStateListener mAuthListener;
//widgets
private FloatingActionButton mFab, mFab2;
private RecyclerView mRecyclerView;
private SwipeRefreshLayout mSwipeRefreshLayout;
public FirebaseFirestore db = FirebaseFirestore.getInstance();
//vars
private View mParentLayout;
private ArrayList<Search> mSearch = new ArrayList<>();
private ArrayList<Note> mNotes = new ArrayList<>();
private DocumentReference noteRef = db.collection("notes").document();
private CollectionReference notesCollectionRef = db.collection("notes");
private NoteRecyclerViewAdapter mNoteRecyclerViewAdapter;
private SearchRecyclerViewAdapter mSearchRecyclerViewAdapter;
private DocumentSnapshot mLastQueriedDocument;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
this.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
super.onCreate(savedInstanceState);
setContentView(R.layout.search_recycler);
mParentLayout = findViewById(android.R.id.content);
mRecyclerView = findViewById(R.id.recycler_view_search);
EditText userinput = findViewById(R.id.userInputtxt);
initRecyclerView();
getNotes();
}
@Override
public void onBackPressed() {
super.onBackPressed();
Animatoo.animateFade(Search_test.this); //fire the slide left animation
}
@Override
public boolean onCreatOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.toolbar, menu);
return true;
}
@Override
public void deleteNote(final Note note) {
FirebaseFirestore db = FirebaseFirestore.getInstance();
DocumentReference noteRef = db
.collection("notes").document(note.getNote_id());
noteRef.delete().addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()) {
makeSnackBarMessage("Deleted note");
mRecyclerView.setAdapter(null);// trying to make the recycle view remove the adapter but still loading the old list //
} else {
makeSnackBarMessage("Failed. Check log.");
}
}
});
}
@Override
public void onRefresh() {
}
private void getNotes() {
FirebaseFirestore db = FirebaseFirestore.getInstance();
final EditText userinput = findViewById(R.id.userInputtxt);
CollectionReference notesCollectionRef = db
.collection("notes");
Query notesQuery = null;
if (mLastQueriedDocument != null) {
notesQuery = notesCollectionRef
.orderBy("timestamp", Query.Direction.ASCENDING);
} else {
notesQuery = notesCollectionRef
.orderBy("timestamp", Query.Direction.ASCENDING);
}
notesQuery.get().addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {
@Override
public void onComplete(@NonNull Task<QuerySnapshot> task) {
if (task.isSuccessful()) {
String data = "";
for (final QueryDocumentSnapshot document : task.getResult()) {
Note note = document.toObject(Note.class);
mNotes.add(note);
if (userinput == null) {
mRecyclerView.setAdapter(null);
}
if (userinput != null) {
userinput.addTextChangedListener(
new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void afterTextChanged(Editable s) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
final String userinputString = userinput.getText().toString();
mSearch.clear();
for (Note note : mNotes) {
if (note.getTitle().contains(userinputString)) {
if (note != null) {
mSearch.add(note);
mSearchRecyclerViewAdapter = new SearchRecyclerViewAdapter(Search_test.this, mSearch);
mRecyclerView.setLayoutManager(new LinearLayoutManager(Search_test.this));
mRecyclerView.setAdapter(mSearchRecyclerViewAdapter);
mSearchRecyclerViewAdapter.notifyDataSetChanged();
}
}
}
}
}
);
}
}
if (task.getResult().size() != 0) {
mLastQueriedDocument = task.getResult().getDocuments()
.get(task.getResult().size() - 1);
}
mSearchRecyclerViewAdapter.notifyDataSetChanged();
} else {
makeSnackBarMessage("Query Failed. Check Logs.");
}
}
});
}
private void initRecyclerView() {
if (mNoteRecyclerViewAdapter == null) {
mSearchRecyclerViewAdapter = new SearchRecyclerViewAdapter(this, mSearch);
}
mRecyclerView.setLayoutManager(new LinearLayoutManager(this));
mRecyclerView.setAdapter(mSearchRecyclerViewAdapter);
}
@Override
public void updateNote(final Note note) {
FirebaseFirestore db = FirebaseFirestore.getInstance();
DocumentReference noteRef = db
.collection("notes")
.document(note.getNote_id());
noteRef.update(
"title", note.getTitle(),
"content", note.getContent(), "pos", note.getpos()
).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()) {
makeSnackBarMessage(" تم تحديث المعلومات");
} else {
makeSnackBarMessage("حدث خطأ , يرجى اعادة المحاولة");
}
}
});
}
@Override
public void onNoteSelected(Note note) {
ViewNoteDialog dialog = ViewNoteDialog.newInstance(note);
dialog.show(getSupportFragmentManager(), getString(R.string.dialog_view_note));
}
@Override
public void createNewNote(String title, String content, String pos) {
FirebaseFirestore db = FirebaseFirestore.getInstance();
String userId = FirebaseAuth.getInstance().getCurrentUser().getUid();
DocumentReference newNoteRef = db
.collection("notes")
.document();
Note note = new Note();
note.setTitle(title);
note.setContent(content);
note.setPos(pos);
note.setNote_id(newNoteRef.getId());
note.setUser_id(userId);
newNoteRef.set(note).addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()) {
makeSnackBarMessage("تمت اضافة رقم الهاتف للسجل");
getNotes();
} else {
makeSnackBarMessage(" يوجد خطأ , يرجى اعادة المحاولة");
}
}
});
}
private void makeSnackBarMessage(String message) {
Snackbar.make(mParentLayout, message, Snackbar.LENGTH_SHORT).show();
}
@Override
public void onClick(View view) {
{
}
}
}