0

我正在为我的项目的 ListViews 创建一些 ViewHolders,在我正在存储视图、ImageViews、TextViews 等的 viewholders 内。

在视图持有者的类中,我还创建了从项目状态 IE 配置视图的方法:

对于聊天消息列表项,我将有一个带有消息发送者的 textview 的 viewholder,一个带有他的头像的 imageview,一个包含来自 App 资源的图像的 imageview,以将消息标识为音频消息、视频消息、文本消息和很快。在同一个 ViewHolder 中,我还有以下方法:

configureViewFromMessage(MessageSender sender, Message message)

从 Sender 和 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 中保留严格要求的字段而没有方法吗?
4

1 回答 1

2

如您所知,ViewHolder用于优化ListView-s 性能,例如保存已创建的视图,滚动后您正在查看此视图​​,更改其图像或文本或您拥有的任何视图并将其作为另一个 ListItem 放回。因此,您避免findViewById()每次都使用和创建新视图。

在我看来,如果你把一些方法放进ViewHolder去应该不会导致任何性能问题ListViews,除非这些方法写得不好。只要您避免创建新视图并findViewById()每次都使用它就可以了。

于 2013-08-26T12:35:04.177 回答