ListView重复,因为View被读取为Non Null

问题描述

和许多其他人一样,我在ListView中重复执行ListItems时遇到问题。但是,在阅读了许多答案之后,我认为我的问题有所不同。

我认为ListViewAdapter中的getView代码可以。问题在于,当我向下滚动经过前两个项目(加载正常)时,系统读取的第三个项目与第一个项目具有相同的标签,而第四个项目读取的项目与第二个具有相同的标签

(我的ArrayList中有4个项目,因此至少显示了正确的视图数)

这是我要解释的日志:

enter image description here

为什么当我向下滚动到以前的标签时,系统会读取带有新标签的新视图?

这是我的getView代码,以防万一我在寻找类似问题/答案时错过了某些东西:

@NonNull
@Override
public View getView(final int position,@Nullable View convertView,@NonNull ViewGroup parent) {

    Log.d(TAG,"getView: Array position " + position);

    final ViewHolder holder;
    if (convertView == null){
        convertView = mInflater.inflate(mLayoutResource,parent,false);
        holder = new ViewHolder();

        //Identify all widgets
        holder.mCreatorName = (TextView) convertView.findViewById(R.id.user_group_name_photo_toolbar_name_textView);
        holder.mCreatorImage = (CircleImageView) convertView.findViewById(R.id.user_group_name_photo_toolbar_profilePhoto);
        holder.mProjectName = (TextView) convertView.findViewById(R.id.layout_project_listitem_projectName_textView);
        holder.mSummary = (TextView) convertView.findViewById(R.id.layout_project_listitem_projectSummary_textView);
        holder.mSupportText = (TextView) convertView.findViewById(R.id.layout_project_listitem_support_textView);
        holder.mCollaborateText = (TextView) convertView.findViewById(R.id.layout_project_listitem_collaborate_textView);
        holder.mCommentText = (TextView) convertView.findViewById(R.id.layout_project_listitem_comment_textView);
        holder.mProjectPhoto = (SquareImageView) convertView.findViewById(R.id.layout_project_listitem_photo_imageView);
        holder.mLocation = (TextView) convertView.findViewById(R.id.layout_project_listitem_projectLocation_textView);
        holder.mStartDate = (TextView) convertView.findViewById(R.id.layout_project_listitem_startDate_textView);
        holder.mEndDate = (TextView) convertView.findViewById(R.id.layout_project_listitem_endDate_textView);
        holder.mProject = getItem(position);

        Log.d(TAG,"getView: view is null");
        Log.d(TAG,"getView Loading into view: " + holder.mProject.getName());

        convertView.setTag(holder);
        Log.d(TAG,"getView Setting view with tag: " + convertView.getTag().toString());
    }
    else{
        holder = (ViewHolder) convertView.getTag();
        Log.d(TAG,"getView: convertview is not null: " + convertView.getTag().toString());
        Log.d(TAG,"getView Repeating into view: " + holder.mProject.getName());
    }

    //Set all widgets
    holder.mProjectName.setText(holder.mProject.getName());
    holder.mSummary.setText(holder.mProject.getSummary());
    holder.mLocation.setText(holder.mProject.getLocation());
    holder.mStartDate.setText(dateConverter(holder.mProject.getStartDate()));
    holder.mEndDate.setText(dateConverter(holder.mProject.getEndDate()));
    holder.mSupportText.setText(Integer.toString(holder.mProject.getSupporter_count()));
    holder.mCollaborateText.setText(Integer.toString(holder.mProject.getCollaborator_count()));
    holder.mCommentText.setText(Integer.toString(holder.mProject.getComment_count()));
    Picasso.get().load(holder.mProject.getProject_photo()).into(holder.mProjectPhoto);

    //Query to get Creator Name and Photo
    String creatorId = holder.mProject.getCreator_id();
    DocumentReference mDocRef = mDatabase.collection(mContext.getString(R.string.firestore_collection_users)).document(creatorId);
    mDocRef.get().addOnSuccessListener(new OnSuccessListener<DocumentSnapshot>() {
        @Override
        public void onSuccess(DocumentSnapshot documentSnapshot) {
            User user = documentSnapshot.toObject(User.class);
            holder.mCreatorName.setText(user.getName());
            Picasso.get().load(user.getProfile_photo()).into(holder.mCreatorImage);
        }
    });

    return convertView;
}

感谢您的帮助!

亚历克斯

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)