【问题标题】:Recyclerview item shows two time after deletionRecyclerview 项目删除后显示两次
【发布时间】:2020-08-26 19:35:14
【问题描述】:

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


                }

【问题讨论】:

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


    【解决方案1】:

    您正在将侦听器附加到数据库:

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

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

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

    所以在onDataChange 中添加myUploads.clear(); 作为第一行。

    【讨论】:

      猜你喜欢
      • 2018-12-06
      • 1970-01-01
      • 2021-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-16
      • 2023-03-25
      相关资源
      最近更新 更多