2013-08-26 4 views
0

Я создаю несколько ViewHolders для списков ListViews для своих проектов, внутри держателей форм я храню представления, ImageViews, TextView и многое другое.Проблемы с производительностью Android с помощью ViewHolder

В классе viewholder, я создал также методы, чтобы настроить вид из статуса элемента, IE:

Для элемента списка сообщений чата, я буду иметь viewholder с TextView для отправителя сообщения, ImageView с его аватаром, изображение, которое содержит изображения из ресурсов приложения, чтобы идентифицировать сообщение как звуковое сообщение, видео сообщение, текстовое сообщение и так далее. В том же ViewHolder у меня есть также такие методы, как:

configureViewFromMessage(MessageSender sender, Message message) 

, который конфигурирует аватар, имя отправителя и тип сообщения от отправителя и моделей Сообщения POJO.

EDIT: Я добавляю пример адаптера, чтобы объяснить это лучше.

public View getView(int position, View convertView, ViewGroup viewGroup) { 
    ContactViewHolder cvh; 

    if (convertView != null) { 
     cvh = (ContactViewHolder) convertView.getTag(); 
    } else { 
     convertView = InflateUtils.inflate(mContext, R.layout.contact_list_item); 
     convertView = InflateUtils.inflate(mContext, R.layout.contact_list_item_container); 
     cvh = new ContactViewHolder(innerView); 
     convertView.setTag(cvh); 
    } 

    /* Getting message */ 
    Message message = getItem(position); 
    MessageSender sender = message.getSender(); 

    /* View settings */ 
    cvh.configureViewFromMessage(sender, message, mContext); 
     /* Context is used to reach App's Resources */ 

    return convertView; 
} 

Вопросы являются:

  1. Имея эти методы (возможно, много) внутри ViewHolder может вызвать проблемы с производительностью?
  2. Должен ли я хранить в ViewHolders только строго обязательные поля и методы?
+3

Просьба показать ваш пользовательский адаптер –

ответ

2

Как вы знаете, ViewHolder используется для оптимизации ListView -s производительности как сохранение уже создали зрения и после прокрутки вы принимаете эту точку зрения, изменить свое изображение или текст или любой просмотра у вас есть и положить его обратно в другой ListItem. Таким образом, вы избегаете использования findViewById() и создания новых представлений каждый раз.

На мой взгляд, если вы поместите некоторые методы в ViewHolder, это не должно вызывать никаких проблем с производительностью до ListViews, если эти методы плохо написаны. До тех пор, пока вы избегаете создания новых просмотров и используете findViewById() каждый раз, все должно быть в порядке.

Смежные вопросы