簡體   English   中英

在Firebase中刪除行后如何刷新Recycleview適配器中的數據

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

我已經使用了帶有cardivew的Recycleview以及數據列表和按鈕來刪除任何值。 當我單擊按鈕時,它的確從firebase數據庫中刪除了該值,但文本和行仍保留在應用程序的適配器中,但僅當我通過返回並重新打開關閉活動,然后行為空時。

我每次在兩個地方使用下面的方法(我也在代碼中顯示過),但是它不起作用

                         bookslist.remove(position);   
                         notifyDataSetChanged();       

按下刪除按鈕后如何立即更新recycleview

這是我的代碼

 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(); } } 

使用notifyItemRemoved(position);


例如-

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM