Android RecyclerView在滚动时会混淆数据

Android RecyclerView在滚动时会混淆数据,android,android-recyclerview,Android,Android Recyclerview,我已经看过无数关于这个的stackoverflow线程,但找不到解决方案。所以,我的问题是,当我在我的回收器视图中滚动时,数据会在一瞬间混淆,然后再次得到纠正 这是我的适配器: class ListViewAdapter extends RecyclerView.Adapter<ListViewAdapter.ViewHolder> { private Typeface font; private Context context; private ArrayList<Stri

我已经看过无数关于这个的stackoverflow线程,但找不到解决方案。所以,我的问题是,当我在我的回收器视图中滚动时,数据会在一瞬间混淆,然后再次得到纠正

这是我的适配器:

class ListViewAdapter extends RecyclerView.Adapter<ListViewAdapter.ViewHolder> {

private Typeface font;
private Context context;
private ArrayList<String> events;
private VisitorAttendeesHandler visitorAttendeesHandler;

ListViewAdapter(Typeface font, Context context, ArrayList<String> events) {
    this.font = font;
    this.context = context;
    this.events = events;
}

class ViewHolder extends RecyclerView.ViewHolder {
    View mView;
    FrameLayout progressBar;
    TextView event_title, event_date, event_time, event_address;

    public ViewHolder(View itemView) {
        super(itemView);
        mView = itemView;
        progressBar = (FrameLayout) mView.findViewById(R.id.progressBar);
        event_title = (TextView) mView.findViewById(R.id.event_title);
        event_date = (TextView) mView.findViewById(R.id.event_date);
        event_time = (TextView) mView.findViewById(R.id.event_time);
        event_address = (TextView) mView.findViewById(R.id.event_address);
    }

    void showProgressBar() {
        progressBar.setVisibility(View.VISIBLE);
    }

    void hideProgressBar() {
        progressBar.setVisibility(View.GONE);
    }

    void setClickListener(final String eid) {
        mView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                int pos = getAdapterPosition();
                Intent intent = new Intent(context, EventInfoActivity.class);
                intent.putExtra("eid", eid);
                context.startActivity(intent);

            }
        });
    }

    public void setAttendees(String eid) {
        final ArrayList<User> attendeesList = new ArrayList<>();
        final TextView event_attendees = (TextView) mView.findViewById(R.id.event_attendees);
        final ImageView statusBadge = (ImageView) mView.findViewById(R.id.statusBadge);
        event_attendees.setTypeface(font);

        visitorAttendeesHandler = new VisitorAttendeesHandler(eid, LoggedInUser.getInstance().getUid(), new VisitorAttendeesCallback() {
            @Override
            public void attendeeEventStatus(AttendeeStatus status) {
                if (attendeesList.isEmpty()) event_attendees.setText("0");
                Log.e("STATUS - ", status.toString());
                switch (status) {
                    case APPROVED:
                        statusBadge.setVisibility(View.VISIBLE);
                        statusBadge.setImageDrawable(context.getResources().getDrawable(R.drawable.joined_badge));
                        break;
                    case REJECTED:
                        statusBadge.setVisibility(View.VISIBLE);
                        statusBadge.setImageDrawable(context.getResources().getDrawable(R.drawable.rejected_badge));
                        break;
                    case PENDING:
                        statusBadge.setVisibility(View.VISIBLE);
                        statusBadge.setImageDrawable(context.getResources().getDrawable(R.drawable.pending_badge));
                        break;
                    default:
                        statusBadge.setVisibility(View.GONE);
                        break;
                }
            }

            @Override
            public void onUpdate(Map<String, AttendeeStatus> attendees, final AttendeesCallbackEvent trigger) {
                for (Map.Entry e : attendees.entrySet()) {
                    if (e.getValue() == AttendeeStatus.APPROVED) {
                        CurrentUserListeners.getUserInfo(e.getKey().toString(), new UserFetchedCallback() {
                            @Override
                            public void ready(User user) {
                                if (trigger == AttendeesCallbackEvent.ADDED) {
                                    attendeesList.add(user);
                                    event_attendees.setText(Integer.toString(attendeesList.size()));
                                } else if (trigger == AttendeesCallbackEvent.REMOVED) {
                                    attendeesList.remove(user);
                                    event_attendees.setText(Integer.toString(attendeesList.size()));
                                }
                            }
                        });
                    }
                }

                visitorAttendeesHandler.getAttendeeStatus();
            }
        });

        visitorAttendeesHandler.subscribeToApprovedAttendees();
        visitorAttendeesHandler.getAttendeeStatus();

    }

    public void setImage(String eid) {
        final SimpleDraweeView draweeView = (SimpleDraweeView) mView.findViewById(R.id.my_image_view);

        if (!eid.equals("")) {
            EventPictureDao eventPictureDao = new EventPictureDaoImpl(eid);
            eventPictureDao.getEventPhotos(new PhotosFetchedCallback() {
                @Override
                public void onPhotosReady(HashMap<String, String> photoURLs) {
                    if (photoURLs != null) {
                        GenericDraweeHierarchyBuilder builder =
                                new GenericDraweeHierarchyBuilder(context.getResources());
                        GenericDraweeHierarchy hierarchy = builder
                                .setFadeDuration(300)
                                .setPlaceholderImage(context.getResources().getDrawable(R.drawable.no_photo_placeholder))
                                .setPlaceholderImageScaleType(ScalingUtils.ScaleType.CENTER_CROP)
                                .setActualImageScaleType(ScalingUtils.ScaleType.CENTER_CROP)
                                .build();
                        draweeView.setHierarchy(hierarchy);

                        for (Map.Entry e : photoURLs.entrySet()) {
                            draweeView.setImageURI(e.getValue().toString());
                        }

                    } else {
                        draweeView.setImageResource(R.drawable.no_photo_placeholder);
                        draweeView.setScaleType(ImageView.ScaleType.CENTER_CROP);
                    }
                }
            });
        }
    }
}


@Override
public ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    View itemView = LayoutInflater.from(parent.getContext())
            .inflate(R.layout.item_list_view, parent, false);

    return new ViewHolder(itemView);

}

@Override
public void onBindViewHolder(final ViewHolder holder, final int position) {
    //holder.showProgressBar();
    EventDao eventDao = new EventDaoImpl();
    eventDao.getEventInfo(events.get(position), new EventFetchedCallback() {
        @Override
        public void onEventReady(Event event) {
            holder.event_title.setText(event.getEventTitle());
            holder.event_date.setText(event.getStartDate());
            holder.event_time.setText(event.getStartTime());
            holder.setAttendees(events.get(position));
            holder.event_address.setText(event.getEventAddress());
            holder.setImage(events.get(position));
            holder.setClickListener(events.get(position));
            holder.hideProgressBar();
        }
    });
}

@Override
public void onDetachedFromRecyclerView(RecyclerView recyclerView) {
    super.onDetachedFromRecyclerView(recyclerView);
    visitorAttendeesHandler.detachAllListeners();
}

@Override
public int getItemCount() {
    return events.size();
}
类ListViewAdapter扩展了RecyclerView.Adapter{ 专用字体; 私人语境; 私人ArrayList事件; 私人访客Attendee Shandler访客Attendee Shandler; ListViewAdapter(字体、上下文、ArrayList事件){ this.font=font; this.context=上下文; 这个事件=事件; } 类ViewHolder扩展了RecyclerView.ViewHolder{ 视图视图; 框架布局进度条; text查看事件标题、事件日期、事件时间、事件地址; 公共视图持有者(视图项视图){ 超级(项目视图); mView=项目视图; progressBar=(FrameLayout)mView.findviewbyd(R.id.progressBar); event_title=(TextView)mView.findViewById(R.id.event_title); event_date=(TextView)mView.findViewById(R.id.event_date); event_time=(TextView)mView.findviewbyd(R.id.event_time); event_address=(TextView)mView.findViewById(R.id.event_address); } void showProgressBar(){ progressBar.setVisibility(View.VISIBLE); } void hideProgressBar(){ progressBar.setVisibility(View.GONE); } void setClickListener(最终字符串eid){ mView.setOnClickListener(新视图.OnClickListener(){ @凌驾 公共void onClick(视图v){ int pos=getAdapterPosition(); 意向意向=新意向(上下文,EventInfoActivity.class); 意向。额外(“eid”,eid); 背景。开始触觉(意图); } }); } 公共空集合参与者(字符串eid){ 最终ArrayList AttendesList=新ArrayList(); 最终文本视图事件参与者=(文本视图)mView.findViewById(R.id.event\u attenders); 最终ImageView statusBadge=(ImageView)mView.findViewById(R.id.statusBadge); 活动参与者。设置字体(字体); visitorAttendeesHandler=新visitorAttendeesHandler(eid,LoggedInUser.getInstance().getUid(),新VisitorAttendeesCallback(){ @凌驾 public void AttendeEventStatus(AttendeStatus状态){ if(attendeslist.isEmpty())event_attendes.setText(“0”); Log.e(“STATUS-”,STATUS.toString()); 开关(状态){ 核准个案: statusBadge.setVisibility(视图可见); statusBadge.setImageDrawable(context.getResources().getDrawable(R.drawable.joined_badge)); 打破 案件被驳回: statusBadge.setVisibility(视图可见); statusBadge.setImageDrawable(context.getResources().getDrawable(R.drawable.rejected_badge)); 打破 未决案件: statusBadge.setVisibility(视图可见); statusBadge.setImageDrawable(context.getResources().getDrawable(R.drawable.pending_badge)); 打破 违约: statusBadge.setVisibility(查看.消失); 打破 } } @凌驾 public void onUpdate(映射与会者、最终与会者ScallBackEvent触发器){ 对于(Map.Entry e:attendes.entrySet()){ 如果(例如getValue()==AttendeStatus.APPROVED){ CurrentUserListeners.getUserInfo(例如getKey().toString(),new UserFetchedCallback()){ @凌驾 公共作废准备就绪(用户){ 如果(触发器==AttendeeScalbackEvent.ADDED){ AttendesList.add(用户); event_attendes.setText(Integer.toString(attendeesList.size()); }else if(触发器==AttendeeScalbackEvent.REMOVED){ AttendesList.remove(用户); event_attendes.setText(Integer.toString(attendeesList.size()); } } }); } } visitorAttendeesHandler.getAttendeeStatus(); } }); Visitor Attendee Shandler.subscribeToApprovedAttendees(); visitorAttendeesHandler.getAttendeeStatus(); } 公共void setImage(字符串eid){ 最终SimpleDraweView抽屉视图=(SimpleDraweView)mView.findViewById(R.id.my_image_视图); 如果(!eid.equals(“”){ EventPictureDao EventPictureDao=新的EventPictureDaoImpl(eid); getEventPhotos(新的PhotosFetchedCallback(){ @凌驾 公共void onphoto就绪(HashMap photourl){ if(photoURL!=null){ GenericDraweeHierarchyBuilder生成器= 新的GenericDraweeHierarchyBuilder(context.getResources()); GenericDraweeHierarchy层次结构=生成器 .setFadeDuration(300) .setPlaceholder图像(context.getResources().getDrawable(R.drawable.no\u photo\u占位符)) .setPlaceholderImageScaleType(ScalingUtils.ScaleType.CENTER\u裁剪) .SetImplementImageScaleType(ScalingUtils.ScaleType.CENTER\U裁剪) .build(); PayeView.setHierarchy(层次结构); 对于(Map.Entry e:photoURLs.entrySet()){ 付款人查看