2013-08-26 42 views
0

我創建一些ViewHolders爲我的項目的ListViews,在視圖內我存儲視圖,ImageViews,TextViews和更多。Android性能問題與ViewHolder

在viewholder的課我還創建方法來配置從項目的狀態,IE的觀點:

對於聊天消息列表項,我將有一個viewholder與消息的發送者,一個ImageView的一個TextView用他的頭像,一個包含來自應用程序資源的圖像的圖像視圖,以將該消息標識爲音頻消息,視頻消息,文本消息等等。 在同一ViewHolder我也得到了類似的方法:

configureViewFromMessage(MessageSender sender, Message message) 

用於配置從發件人和郵件POJO模型的頭像,發送者姓名和消息類型。

編輯: 我添加了一個示例適配器來解釋這個更好。

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()就可以。