【问题标题】:Recycler View Showing Duplicate items显示重复项目的回收站视图
【发布时间】:2020-05-04 06:14:35
【问题描述】:

在上图中,当我单击任何项​​目的关注按钮时,回收站视图会自动添加所有项目的更新值两次,如下图所示。 (这里我点击了UJjwal Pratap的关注按钮)

适配器

public void onBindViewHolder(@NonNull ViewHolder holder, final int position) {
        final UserDataModel userDataModel = userDataModelList.get(position);
        userName.setText(userDataModel.getUserName());
        userFollowers.setText(userDataModel.getUserFollowers() + " Followers");

        followUser.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                DatabaseReference databaseReference = FirebaseDatabase.getInstance().getReference().child("Users").child(userDataModel.getUserID()).child("Followers")
                        .child(Objects.requireNonNull(FirebaseAuth.getInstance().getUid()));
                databaseReference.addListenerForSingleValueEvent(new ValueEventListener() {
                    @Override
                    public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                        if (dataSnapshot.exists() && Objects.requireNonNull(dataSnapshot.getValue()).toString().equals("1")) {
                            FirebaseDatabase.getInstance().getReference().child("Users").child(userDataModel.getUserID()).child("Followers")
                                    .child(Objects.requireNonNull(FirebaseAuth.getInstance().getUid())).removeValue();
                            FirebaseDatabase.getInstance().getReference().child("Users").child(FirebaseAuth.getInstance().getUid())
                                    .child("Following").child(userDataModel.getUserID()).removeValue();
                        } else {
                            FirebaseDatabase.getInstance().getReference().child("Users").child(userDataModel.getUserID()).child("Followers")
                                    .child(Objects.requireNonNull(FirebaseAuth.getInstance().getUid())).setValue("1");
                            FirebaseDatabase.getInstance().getReference().child("Users").child(FirebaseAuth.getInstance().getUid())
                                    .child("Following").child(userDataModel.getUserID()).setValue("1");
                        }
                    }

                    @Override
                    public void onCancelled(@NonNull DatabaseError databaseError) {

                    }
                });
            }
        });
    }

片段

FirebaseDatabase.getInstance().getReference().child("Users").addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                for (DataSnapshot childSnapshot : dataSnapshot.getChildren()) {
                    if (!Objects.equals(childSnapshot.getKey(), FirebaseAuth.getInstance().getUid())) {
                        final UserDataModel userDataModel = childSnapshot.getValue(UserDataModel.class);
                        assert userDataModel != null;
                        userDataModel.setUserFollowers(String.valueOf(childSnapshot.child("Followers").getChildrenCount()));
                        PeopleArrayList.add(userDataModel);
                    }
                }
                PeopleAdapter = new PeopleAdapter(PeopleArrayList);
                PeopleRecyclerView.setAdapter(PeopleAdapter);
            }

            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {

            }
        });

【问题讨论】:

  • 好吧,首先你的数据逻辑应该在 ViewModel 中,ViewModel 应该把它交给片段而不是对面......

标签: java android firebase android-recyclerview


【解决方案1】:

验证PeopleArrayList

然后在设置适配器之前使用peopleArrayList.clear

然后使用peopleAdapter.notifySetDataChanged();

谢谢!快乐编码!

【讨论】:

  • 每次都会创建新的适配器,因此您的代码不应该工作
  • 所以popleArrayList.clear每次也会打电话,我的可以工作
猜你喜欢
  • 1970-01-01
  • 2020-09-11
  • 1970-01-01
  • 2016-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-03
  • 2021-12-17
相关资源
最近更新 更多