>我正在尝试使用以下代码将数据从 firebase 加载到回收器视图,但是,连续向下滚动很长时间后滚动回收器视图时遇到问题,这只发生在第一次数据加载时,我真的不知道我的代码出了什么问题,请帮忙!
这是我的 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;
}
}
我相信
inner_class7是对的,您同时加载数据并绑定它。先加载它,然后绑定。但也许这可能有助于解决您的问题,请在适配器中覆盖这些方法:
@Override
public long getItemId(int position) {
return position;
}
@Override
public int getItemViewType(int position) {
return position;
}
但绝对要先遵循inner_class7建议。