我需要在RecyclerView适配器 onClick 后从Firebase中删除子项。
我有这样的事情:
public void onBindViewHolder(final ViewHolder holder, final int position) {
holder.fromTextView.setText(my_data.get(position).getFromName());
holder.fromTextView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
FirebaseDatabase database = FirebaseDatabase.getInstance();
final DatabaseReference messageRef = database.getReference();
final DatabaseReference mess = messageRef.child("notifications").child(toId.toString());
mess.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot dataSnapshot, String s) {
//Code for delete?
}
}
}
}
Firebase数据库: Firebase Database Android RecyclerView: Android Recycler View
点击商品后,我需要将其从Firebase数据库中删除。 我只需要删除一个孩子。
感谢。
答案 0 :(得分:0)
为了删除Firebase数据库记录,您不需要使用监听器,您只需要在引用上直接使用removeValue()
方法,如下所示:
messageRef.child("notifications").child(toId.toString()).removeValue();
答案 1 :(得分:0)
用户removeValue方法并添加监听器以了解删除操作的状态,如下所示。完整示例http://www.zoftino.com/firebase-realtime-database-android-example#realtime-database-delete
FirebaseDatabase.getInstance().getReference()
.child("notifications").child(toId.toString()).removeValue()
.addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()) {
Log.d("Delete", "Notification has been deleted");
} else {
Log.d("Delete", "Notification couldn't be deleted");
}
}
});
答案 2 :(得分:0)
回顾:
假设您有一个数据库引用负责获取名为 mDatabase 的项目的整个列表,您应该已经对其进行了初始化:
private DatabaseReference mDatabase;
在您的活动主要方法中:
@Override
protected void onCreate(Bundle savedInstanceState) {
mDatabase = FirebaseDatabase.getInstance().getReference();
并以以下方式获取数据:
mDatabase = FirebaseDatabase.getInstance().getReference()
.child("myitems").child(someKey);
现在您的数据正在显示在“回收者”视图中,在某些时候,我们将使用mDatabase成功删除以下项目:
在您的ViewHolder中:
您必须首先从ViewHolder中获取项目位置的引用,而ViewHolder直接从数据库中引用该项目:
假设您的数据库引用为 itemRef :
最终数据库参考** itemRef **
您必须使用getRef将数据库引用分配给每个项目的位置:
final DatabaseReference itemRef = getRef(position);
然后在使用对您的位置和数据库引用的引用后,将其分配给一个String,您将使用它来获取项目的唯一键:
final String myKey = itemRef.getKey();//you can name the myKey whatever you want.
最后,我们可以访问删除项的键:
在此示例中:假设您的删除按钮为:delBtn,并且您的ViewHolder为 GameViewHolder viewHolder,如下所示:
@Override
protected void onBindViewHolder(@NonNull GameViewHolder viewHolder,int position,
@NonNull final Game model)
删除项目:
在您的ViewHolder /引用viewHolder ...中,我们在按钮上设置了一个点钟监听器,并使用我们数据库的所有项目参考来获取特定项目的位置并删除值:
viewHolder.delBtn.setOnClickListener(v -> {
mDatabase.child(myKey).removeValue();
因此,我们整个删除的商品代码如下:
@NonNull
@Override
public GameViewHolder onCreateViewHolder(@NonNull ViewGroup viewGroup, int i) {
LayoutInflater inflater = LayoutInflater.from(viewGroup.getContext());
return new GameViewHolder(inflater.inflate(R.layout.single_item, viewGroup, false));}
@Override
protected void onBindViewHolder(@NonNull GameViewHolder viewHolder,int position,
@NonNull final Game model){
final DatabaseReference itemRef = getRef(position);
final String myKey = itemRef.getKey();//you can name the myKey whatever you want.
viewHolder.delBtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mDatabase.child(myKey).removeValue();
}
});