如何解决ListView重复,因为View被读取为Non Null
和许多其他人一样,我在ListView中重复执行ListItems时遇到问题。但是,在阅读了许多答案之后,我认为我的问题有所不同。
我认为ListViewAdapter中的getView代码可以。问题在于,当我向下滚动经过前两个项目(加载正常)时,系统读取的第三个项目与第一个项目具有相同的标签,而第四个项目读取的项目与第二个具有相同的标签。
(我的ArrayList中有4个项目,因此至少显示了正确的视图数)
这是我要解释的日志:
为什么当我向下滚动到以前的标签时,系统会读取带有新标签的新视图?
这是我的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 举报,一经查实,本站将立刻删除。