【发布时间】:2018-01-22 19:13:12
【问题描述】:
我有一个带有明信片的 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;
}
});
【问题讨论】:
-
问题可能出在适配器类中。
-
我认为问题可能存在于您可能正在使用的 ViewHolder 或 Adapter 中。毕竟,这只是代码的一部分。
-
这是适配器类。但是等一下,我会上传完整的课程
-
请检查我是否添加了有问题的链接@TharakaDevinda
-
添加了有问题的链接@Yupi
标签: android firebase firebase-realtime-database android-recyclerview