为什么 getView 混合我的行?

Why getView mix my rows?

GetView 方法正确设置数据。我检查我的 mMessageList 项目标签并膨胀相应的布局,但在滚动 getView 时混合它们。我该如何解决这个问题?

public View getView(int position, View convertView, ViewGroup parent) {

    ViewHolder viewHolder = null;

    if(convertView == null){
        viewHolder = new ViewHolder();
        if(mMessageList.get(position).getTag() == RespKey.MESSAGE_TAG_CUSTOMER){
            convertView = mInflater.inflate(R.layout.message_list_row_customer, null);
            viewHolder.messageTextView = (TextView) convertView.findViewById(R.id.userMessageText);
            viewHolder.messageImageView = (ImageView) convertView.findViewById(R.id.userMessageIcon);
        } else {
            convertView = mInflater.inflate(R.layout.message_list_row_driver, null);
            viewHolder.messageTextView = (TextView) convertView.findViewById(R.id.driverMessageText);
            viewHolder.messageImageView = (ImageView) convertView.findViewById(R.id.driverMessageIcon);
        }
        convertView.setTag(viewHolder);
      } else {
        viewHolder = (ViewHolder) convertView.getTag();
    }


    viewHolder.messageTextView.setText(mMessageList.get(position).getMessage());
    return convertView;
}

public static class ViewHolder{

    public TextView messageTextView;
    public ImageView messageImageView;
}

对于此用例,您必须覆盖 getViewTypeCountgetItemViewType 。前者 return 是您需要的不同 convertView 的数量。在您的情况下,它应该是 2。后者 return 是 convertView 的类型。 E.x.

@Override
public int getItemViewType(int position) {
        if (mMessageList.get(position).getTag() == RespKey.MESSAGE_TAG_CUSTOMER) {
            return 0;
        }
        return 1;
 }

getItemViewType 总是 return 一个介于 0getViewTypeCount - 1 之间的整数。这个非常重要。在内部,此值用于访问 convertView

的数组