我使用带有数据列表和按钮的 cardivew 的 Recycleview 来删除任何值。当我单击按钮时,它确实从 firebase 数据库中删除了值,但文本和行仍然保留在应用程序的适配器中,但只有当我返回并重新打开关闭 Activity 时,行才为空。
我每次都在两个地方使用下面的方法(我也在代码中显示)但是它不起作用
bookslist.remove(position);
notifyDataSetChanged();
如何在点击删除按钮时立即更新回收 View
这是我的代码
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);
关于java - 如何在删除 Firebase 中的行后刷新 Recyclerview 适配器中的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54158399/