回收器滚动后查看图像和文本混乱



>我正在尝试使用以下代码将数据从 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建议。

最新更新