Recyclerview项目显示删除后两次

时间:2020-08-26 19:35:14

标签: android firebase firebase-realtime-database android-recyclerview

我的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);


                }

1 个答案:

答案 0 :(得分:0)

您要通过以下方式将侦听器附加到数据库:

databaseReference.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
        ...

运行此代码时,Firebase将立即在databaseReference加载当前数据,并使用该数据的快照调用onDataChange。然后它将继续观察数据库,如果有机会databaseReference,它将再次使用更新的快照调用onDataChange

因此,每次调用onDataChange时,它将在databaseReference处获取数据的完整快照。因此,您需要先清除myUploads中的当前数据,然后再添加最新快照中的数据。

因此,将myUploads.clear();添加为onDataChange中的第一行。