点击按钮后,视图会更新Recyclerview

时间:2018-01-22 10:12:19

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

我有带明信片的RecyclerView。所以每张明信片都有一个类似的按钮。当我点击一个像按钮。有时它工作正常并更新当前项目。但是当我点击按钮之后滚动一下它会同时更新另一个项目。

它不会将该数据发送到服务器。但是,只有视图更新。然后当我再次向上和向下滚动时。数据恢复正常。

问题在于以下onClick方法: -

FirebaseDatabase.getInstance().getReference().child("topics").child("likes").child(data.getId()).child(username).addValueEventListener(new ValueEventListener() {
            @Override
            public void onDataChange(DataSnapshot dataSnapshot) {
                if (dataSnapshot.child("like").exists()){

                    holder.like.setImageResource(R.drawable.ic_favorite_red_500_36dp);
                    holder.like.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View view) {
                            FirebaseDatabase.getInstance().getReference().child("topics").child("likes").child(data.getId()).child(username).child("like").removeValue();

                        }
                    });

                }else if(dataSnapshot.child("dislike").exists()) {

                    holder.like.setImageResource(R.drawable.brokenheart);
                    holder.like.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View view) {
                            FirebaseDatabase.getInstance().getReference().child("topics").child("likes").child(data.getId()).child(username).child("dislike").removeValue();

                        }
                    });
                }else{
                    holder.like.setImageResource(R.drawable.ic_favorite_border_red_500_36dp);
                    holder.like.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View view) {
                            FirebaseDatabase.getInstance().getReference().child("topics").child("likes").child(data.getId()).child(username).child("dislike").removeValue();
                            FirebaseDatabase.getInstance().getReference().child("topics").child("likes").child(data.getId()).child(username).child("like").setValue(true);

                        }
                    });


                }


            }

            @Override
            public void onCancelled(DatabaseError databaseError) {

            }
        });

        holder.like.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View view) {
                FirebaseDatabase.getInstance().getReference().child("topics").child("likes").child(data.getId()).child(username).child("like").removeValue();
                FirebaseDatabase.getInstance().getReference().child("topics").child("likes").child(data.getId()).child(username).child("dislike").setValue(true);

                return true;
            }
        });

完整适配器类https://pastebin.com/UnFGahWT

1 个答案:

答案 0 :(得分:1)

请尝试以下操作: -

public ViewHolder(View itemView)方法中设置单击侦听器,并使ViewHolder类实现View.OnClickListener。

在适配器中添加:

  public Topic getItem(int position) {
    return topics.get(position);
   }

在ViewHolder的onClick方法中添加:

 int position = getAdapterPosition();
 if (position == RecyclerView.NO_POSITION) return;
 item = getItem(position);

因此,您将获得您需要更改或使用它做某事的确切对象。