RecyclerView图像和文本在滚动后搞砸了

时间:2018-03-22 22:38:43

标签: java android android-recyclerview recycler-adapter

我正在尝试使用下面的代码将数据从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;
        }
    }

1 个答案:

答案 0 :(得分:0)

我相信inner_class7是正确的,您正在加载数据并同时绑定它。首先加载然后绑定。但也许这可能有助于解决您的问题,在您的适配器中覆盖这些方法:

@Override
public long getItemId(int position) {
    return position;
}

@Override
public int getItemViewType(int position) {
    return position;
}

但绝对要先遵循inner_class7建议。