我的Android应用程序在这里有一个小问题。我正在尝试从recyclerview中删除一个项目,同时从Firebase数据库中删除一个项目。一切正常,除了我注意到删除项目后每次都会显示两次其他项目。例如,假设我有两个项目,Item_A和Item_B。如果删除Item_A,则Item_B会显示两次。如何防止这种情况发生
//Code
FirebaseDatabase.getInstance().getReference()
.child("items").child(uid).child(users.get(position).id).removeValue().addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
Toast.makeText(mContext, "Deleted", Toast.LENGTH_SHORT).show();;
=
}
});
databaseReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
progressBar.setVisibility(View.GONE);
if(dataSnapshot.exists()){
for (DataSnapshot postsnapshot : dataSnapshot.getChildren()) {
UserInformation2 upload=postsnapshot.getValue(UserInformation2.class);
myUploads.add(upload);
aAdapter = new ImageAdapter2(ProfileActivity.this, myUploads);
recyclerView.setAdapter(aAdapter);
aAdapter.notifyDataSetChanged();
recyclerView.invalidate();
}
linearLayout.setVisibility(View.GONE);
aAdapter.notifyDataSetChanged();
}else{
//txt1.setVisibility(View.VISIBLE);
linearLayout.setVisibility(View.VISIBLE);
}
答案 0 :(得分:0)
您要通过以下方式将侦听器附加到数据库:
databaseReference.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
...
运行此代码时,Firebase将立即在databaseReference
加载当前数据,并使用该数据的快照调用onDataChange
。然后它将继续观察数据库,如果有机会databaseReference
,它将再次使用更新的快照调用onDataChange
。
因此,每次调用onDataChange
时,它将在databaseReference
处获取数据的完整快照。因此,您需要先清除myUploads
中的当前数据,然后再添加最新快照中的数据。
因此,将myUploads.clear();
添加为onDataChange
中的第一行。