简体   繁体   中英

How to refresh data in Recycleview adaper after deleting a row in Firebase

I have used a Recycleview using cardivew with list of data and button to delete any value. when I click button it does delete the value from firebase database but still the text and row remains in adapter in app but only when i close activity by going back and reopen then row is empty.

I used below method at two places each time ( I have shown in code also ) but it doesn't work

                         bookslist.remove(position);   
                         notifyDataSetChanged();       

How can I update the recycleview instantly when I hit delete button

Here is my code

 public class SubjectBooksAdapter extends RecyclerView.Adapter<SubjectBooksAdapter.MyViewHolder> { ArrayList<Books> bookslist; FirebaseDatabase database; DatabaseReference dbreference; public SubjectBooksAdapter(ArrayList<Books> bookslist){ this.bookslist = bookslist; } @Override public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View v = LayoutInflater.from(parent.getContext()).inflate(R.layout.layout,parent,false); return new MyViewHolder(v); } public class MyViewHolder extends RecyclerView.ViewHolder { Button mSolved; MyViewHolder(final View itemView) { super(itemView); database = FirebaseDatabase.getInstance(); dbreference = database.getReference("roomrequest"); dbreference.keepSynced(true); mSolved = (Button) itemView.findViewById(R.id.book_solved); mSolved.setTransformationMethod(null); fauth = FirebaseAuth.getInstance(); } } @Override public void onBindViewHolder(final MyViewHolder holder, final int position) { database = FirebaseDatabase.getInstance(); dbreference = database.getReference("roomrequest"); holder.mSolved.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference(); DatabaseReference classicalMechanicsRef = rootRef.child("roomrequest").child("request").child(g.getRequestid()); ValueEventListener valueEventListener = new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { dataSnapshot.getRef().removeValue(); bookslist.remove(position); \\\\ Solution One notifyDataSetChanged(); \\\\ Solution One } @Override public void onCancelled(@NonNull DatabaseError databaseError) { } }; classicalMechanicsRef.addListenerForSingleValueEvent(valueEventListener); bookslist.remove(position); \\\\ Solution Two notifyDataSetChanged(); \\\\ Solution Two } }); } @Override public int getItemCount() { return bookslist.size(); } } 

use notifyItemRemoved(position);


Eg -

bookslist.remove(position);
notifyItemRemoved(position);

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM