我正在尝试使用下面的代码将数据从firebase加载到recyclerView但是,我在连续向下滚动大量时间之后滚动RecyclerView时遇到问题,而这只发生在数据加载时的第一次,我真的不知道我的代码出了什么问题请帮忙!
这是我onBindViewHolder的总结:
holder.tvPhoneNumber.setText("");
holder.ivContactImage.setImageResource(R.color.avatar_color);
name = FirebaseDatabase.getInstance().getReference().child("Users").child(phoneNumberId);
name.keepSynced(true);
followListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.child("status").exists()) {
nameData = dataSnapshot.child("status").getValue().toString();
holder.tvPhoneNumber.setText(nameData);
} else {
holder.tvPhoneNumber.setText("");
}
if (dataSnapshot.child("thumb_image").exists()) {
imageData = dataSnapshot.child("thumb_image").getValue().toString();
Picasso.with(mContext).load(imageData).resize(100, 100).placeholder(R.color.avatar_color)
.error(R.color.avatar_color).centerCrop().into(holder.ivContactImage);
} else {
holder.ivContactImage.setImageResource(R.color.avatar_color);
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
};
name.addListenerForSingleValueEvent(followListener);
问题是我在我的适配器类中有这个方法
@Override
public int getItemViewType(int position) {
if (position == contactList.size()){
return VIEW_TYPE2;
}else {
return VIEW_TYPE1;
}
}
答案 0 :(得分:0)
我相信inner_class7是正确的,您正在加载数据并同时绑定它。首先加载然后绑定。但也许这可能有助于解决您的问题,在您的适配器中覆盖这些方法:
@Override
public long getItemId(int position) {
return position;
}
@Override
public int getItemViewType(int position) {
return position;
}
但绝对要先遵循inner_class7建议。