【问题标题】:the follow button on the itemView is not working properlyitemView 上的关注按钮无法正常工作
【发布时间】:2021-01-03 17:55:07
【问题描述】:

我使用RecyclerView 搜索用户。 搜索工作正常,但ItemView 中的关注按钮却不行。

每当我按下关注按钮时,按钮上的文字应该从“关注”变为“关注”。并且当我再次按下它时,它应该从“跟随”变为“跟随”。它工作得很好,但突然停止工作了!

每当我按下按钮时,它会从“关注”变为“关注”一秒钟,然后返回“关注”。想不通原因!

这是我的代码。

public void onBindViewHolder(@NonNull final ViewHolder holder, final int position) {

 final User user = mUsers.get(position);
 isFollowing(user.getId(), holder.btn_follow);
 holder.btn_follow.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (holder.btn_follow.getText().toString().equals("follow"))
                {
                    FirebaseDatabase.getInstance().getReference().child("Follow").child(firebaseUser.getUid())
                            .child("following").child(user.getId()).setValue(true);
                    FirebaseDatabase.getInstance().getReference().child("Follow").child(user.getId())
                            .child("followers").child(firebaseUser.getUid()).setValue(true);
                    addNotifications(user.getId());
                }
                else
                {
                    FirebaseDatabase.getInstance().getReference().child("Follow").child(firebaseUser.getUid())
                            .child("following").child(user.getId()).removeValue();
                    FirebaseDatabase.getInstance().getReference().child("Follow").child(user.getId())
                            .child("followers").child(firebaseUser.getUid()).removeValue();
                   // FirebaseDatabase.getInstance().getReference("Notifications").child(user.getId()).removeValue();
                }
            }
        });
    }

这里是isFollowing函数:

private void isFollowing(final String userid, final Button button) {
        DatabaseReference reference = FirebaseDatabase.getInstance().getReference()
                .child("Follow").child(firebaseUser.getUid()).child("following");
        reference.addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                if (dataSnapshot.child(userid).exists()) {
                    button.setText("following");
                    button.setBackgroundResource(R.drawable.buttonafter);
                } else {
                    button.setText("follow");
                    button.setBackgroundResource(R.drawable.buttonbefore);
                }
            }
            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {
            }
        });
    }

它一直返回按钮上的默认“关注”文本,因此不允许我关注任何人。

如果您知道导致此问题的原因,请提供帮助。

【问题讨论】:

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


    【解决方案1】:

    将按钮的onClickListener() 实现从onBindViewHolder() 方法移动到RecyclerViewViewHolder 类。在onBindViewHolder() 中实现监听器不是一个好主意。

    【讨论】:

    • 我尝试这样做,但如您所见,我有这个最终用户 user = mUsers.get(position);在 onBindViewHolder() 方法中。所以当我将 onClickListener() 移动到 ViewHolder 方法时,变量(用户)变为红色,我无法修复它
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-25
    • 1970-01-01
    • 2015-01-31
    • 1970-01-01
    • 2022-01-19
    • 1970-01-01
    • 2013-11-11
    相关资源
    最近更新 更多