我在ListView上的Viewholder有一个夸张的问题。实施了Viewholder后,充气机会出错,因此消息显示错误。(在图10中,消息不是来自我的。此外,每当我滚动,变成7,4或其他任何东西时,错误的消息都会发生变化,就像它随机充气一样)
我有2种不同的充气机,其中一种用于显示其profileImage,另一种用于我。
这是代码:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder viewHolder;
if (convertView == null) {
if(messageList.get(position).getSenderRealId() != relevantId)
{
convertView = getLayoutInflater().inflate(R.layout.message_detail_row_my_inflater, parent, false);
}else{
convertView = getLayoutInflater().inflate(R.layout.message_detail_row_their_inflater, parent, false);
}
viewHolder = new ViewHolder();
viewHolder.messageDateText = (CustomFontTextView) findViewById(R.id.messageDateText);
viewHolder.profileImageView = (SquareImageView) findViewById(R.id.profileImageView);
viewHolder.messageBubbleLayout = (LinearLayout) convertView.findViewById(R.id.messageBubbleLayout);
viewHolder.messageText = (CustomFontTextView) viewHolder.messageBubbleLayout.findViewById(R.id.message_text);
viewHolder.messageHourText = (CustomFontTextView) viewHolder.messageBubbleLayout.findViewById(R.id.messageHourText);
convertView.setTag(viewHolder);
}else{
viewHolder = (ViewHolder)convertView.getTag();
}
viewHolder.messageText.setText(messageList.get(position).getMessage());
viewHolder.messageHourText.setText(Constants.hourFormat.format(messageList.get(position).getSendTime()));
return convertView;
}
和viewHolderClass:
static class ViewHolder {
CustomFontTextView messageDateText;
SquareImageView profileImageView;
LinearLayout messageBubbleLayout;
CustomFontTextView messageText;
CustomFontTextView messageHourText;
}
当前,我仅设置messageHour和messageText,但是除图像以外的所有组件都位于linearlayout(messageBubbleLayout)内,我认为这不会引起问题。
谢谢你的帮助
由于您在此处使用两种不同的布局,因此应使用Android的机制来正确地重用convertviews。
在这里查看教程:
http://antoine-merle.com/blog/2013/06/11/making-a-multiple-view-type-adapter-with-annotations/
在您的情况下,您只有两种类型的视图:“ my”和“ their”,因此请重写getViewTypeCount()
方法以返回2,并getItemViewType()
根据位置返回正确的类型。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句