2014-09-30 69 views
1

我在浏览器上看到了一个与浏览器有关的问题。随着Viewholder的实现,它得到错误的inflater,所以消息显示错误。 (在图像10.消息不是从我而且错误的消息更改,只要我滚动,我成为7,4或任何其他,如果它随机需要inflater)ViewHolder on multiple inflater

我有2个不同的inflater,一个为他们显示他们的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),我不认为内导致问题。

感谢您的帮助

enter image description here

回答

0

由于您使用两种不同的布局,在这里,你应该使用Android的机制正常重用convertviews。

退房的教程在这里:

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

你的情况,你只有两种看法:“我”和“他们”,所以覆盖getViewTypeCount()方法返回2,getItemViewType()到根据位置返回适当的类型。

+0

谢谢,我错过了,因为我每次调用getView()时都会回顾。 – Warwicky 2014-09-30 15:41:27