我正在为我的项目的ListView创建一些ViewHolders,在视图中我存储视图,ImageViews,TextViews等。
在viewholder的类中,我还创建了从项目状态配置视图的方法,I.E:
对于聊天消息列表项,我将拥有一个视图,其中包含消息发送者的textview,带有他头像的imageview,一个包含来自App资源的图像的图像视图,用于将消息标识为音频消息,视频消息,短信等。 在同一个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;
}
问题是:
答案 0 :(得分:2)
如您所知,ViewHolder
用于优化ListView
的性能,例如保存已创建的视图,滚动后您正在使用此视图,更改其图像或文本或您拥有的任何视图把它作为另一个ListItem。因此,您不必每次都使用findViewById()
并创建新视图。
在我看来,如果你在ViewHolder
中添加一些方法,它不应该导致ListViews
出现任何性能问题,除非这些方法写得不好。只要您每次都避免创建新视图并使用findViewById()
就可以了。