我正在为我的应用制作一种Pulse类型的UI。为此,我使用HorizontalListView
类给定here。但是,此类具有性能问题并且会产生明显的延迟。
为了确认这一点,我使用TraceView Profiler
对其进行了评估,发现此类不会完全重复使用视图,并为inflate()
内的每个调用调用getView()
方法。
以下是我设计适配器的方法:
public View getView(final int position, View convertView, ViewGroup parent) {
final BaseAssets baseAsset = baseAssetsList.get(position);
if (convertView == null) {
viewHolder = new ViewHolder();
convertView = inflater.inflate(R.layout.gallery_list_item, parent, false);
viewHolder.newLabel = (ImageView) convertView.findViewById(R.id.iv_new);
viewHolder.assetImage = (ImageView) convertView.findViewById(R.id.iv_thumbnail);
convertView.setTag(viewHolder);
} else
viewHolder = (ViewHolder) convertView.getTag();
}
class ViewHolder {
ImageView newLabel;
ImageView assetImage;
}
我做错了吗?如果没有,请建议我改进性能的解决方法。可能是您尝试过的其他库或以任何方式在当前库中重用视图。谢谢!
答案 0 :(得分:1)
在convertView.setTag(viewHolder);
为空的情况下,您似乎永远不会调用convertView
。如果没有先将其设置为标记,则无法检索ViewHolder
。
修改强>
除了你的代码似乎没问题,我最好的猜测是问题在于HorizontalListView
的实现。
我查看了它的源代码(HorizontalListView.java),如果你可以尝试使用源代码,请在调用mRemovedViewQueue
之前尝试检查mAdapter.getView
是否为空。如果是,则为没有妥善处理回收。