繁体   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