2013-07-11 3 views
0

У меня проблема с BaseAdapter простого представления списка. Я хочу использовать держатель в методе getView для повышения производительности в представлении списка. НО, когда я использую держатель, предметы все перемешаются. число элементов в списке выглядит правильно, но порядок неправильный. благодарит заранее. это мой код внутри GetView:элементы в списке с использованием держателя смешаны

ChatRowView holder; 
    ChatActivity.chatObject currentChatObject = getItem(position); 
    if(convertView == null) 
    { 
     holder = new ChatRowView(); 
     convertView = LayoutInflater.from(parent.getContext()).inflate(R.layout.chat_row, null); 
     holder.chatComponent = new ChatComponent(mContext, currentChatObject.isLeft, currentChatObject.extraType, currentChatObject.message);   

     holder.chatComponent.tvName.setText(currentChatObject.name); 
     holder.chatComponent.tvTime.setText(currentChatObject.time); 
     load("some picture", holder.chatComponent.ivUser); 

     if(currentChatObject.extraType != ExtraContentView.eChatExtraContentType.NONE) 
     { 
      if(currentChatObject.extraType != ExtraContentView.eChatExtraContentType.GAME) 
      { 
       App.loadImage(teamsBaseUrl + "132" + "_70x70.png", holder.chatComponent.extraContentView.ivTeamLogo); 
      } 
      else 
      { 
       App.loadImage(teamsBaseUrl + "132" + "_70x70.png", holder.chatComponent.extraContentView.ivHomeTeamLogo); 
       App.loadImage(teamsBaseUrl + "132" + "_70x70.png", holder.chatComponent.extraContentView.ivAwayTeamLogo); 
      } 
     } 
     ((RelativeLayout)convertView).addView(holder.chatComponent);   
     convertView.setTag(holder); 

     extraButtonsListener(holder.chatComponent); 
    } 
    else 
    { 
     holder = (ChatRowView)convertView.getTag(); 
    }     
    return convertView; 

ответ

0

вы missunderstood использования в viewHolder рисунка. По соображениям эффективности это считалось для того, чтобы избежать прокрутки операции findViewById. Операции set * должны выполняться всегда. Учитывая вашу реализацию, вы должны всегда видеть одни и те же значения (первый)

0

Используйте только getView для перебора представлений, в этом случае атрибуты должны быть сброшены. Элементы Ui, такие как TextView и т. Д., Могут быть повторно использованы, но текст в текстовом представлении должен быть сброшен, даже если convertview не является нулевым. Попробуйте изменить приведенное ниже описание

ChatRowView holder; 
ChatActivity.chatObject currentChatObject = getItem(position); 
if(convertView == null) 
{ 

    convertView = LayoutInflater.from(parent.getContext()).inflate(R.layout.chat_row, null); 

} 


holder = new ChatRowView(); 

    holder.chatComponent = new ChatComponent(mContext, currentChatObject.isLeft,  currentChatObject.extraType, currentChatObject.message);   

    holder.chatComponent.tvName.setText(currentChatObject.name); 
    holder.chatComponent.tvTime.setText(currentChatObject.time); 
    load("some picture", holder.chatComponent.ivUser); 

    if(currentChatObject.extraType != ExtraContentView.eChatExtraContentType.NONE) 
    { 
     if(currentChatObject.extraType != ExtraContentView.eChatExtraContentType.GAME) 
     { 
      App.loadImage(teamsBaseUrl + "132" + "_70x70.png", holder.chatComponent.extraContentView.ivTeamLogo); 
     } 
     else 
     { 
      App.loadImage(teamsBaseUrl + "132" + "_70x70.png", holder.chatComponent.extraContentView.ivHomeTeamLogo); 
      App.loadImage(teamsBaseUrl + "132" + "_70x70.png", holder.chatComponent.extraContentView.ivAwayTeamLogo); 
     } 
    } 
    ((RelativeLayout)convertView).addView(holder.chatComponent);   
    convertView.setTag(holder); 

    extraButtonsListener(holder.chatComponent); 

return convertView; 
Смежные вопросы