1

我对 listviews 上的 viewholder 有一个充气问题。实现了viewholder,它得到错误的inflater,所以消息显示错误。(在图像 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,但除图像之外的所有组件都在我认为不会导致问题的线性布局(messageBubbleLayout)内。

谢谢你的帮助

在此处输入图像描述

4

1 回答 1

0

由于您在这里使用了两种不同的布局,因此您应该使用 Android 的机制来正确重用转换视图。

在此处查看教程:

http://antoine-merle.com/blog/2013/06/11/making-a-multiple-view-type-adapter-with-annotations/

在您的情况下,您只有两种类型的视图:“我的”和“他们的”,因此覆盖getViewTypeCount()方法以返回 2,并getItemViewType()根据位置返回正确的类型。

于 2014-09-30T13:58:03.277 回答