Horizo​​ntalListView性能问题:每个子视图的调用都会膨胀

时间:2013-05-06 05:27:56

标签: android listview horizontallist pulse

我正在为我的应用制作一种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;
 }

我做错了吗?如果没有,请建议我改进性能的解决方法。可能是您尝试过的其他库或以任何方式在当前库中重用视图。谢谢!

1 个答案:

答案 0 :(得分:1)

convertView.setTag(viewHolder);为空的情况下,您似乎永远不会调用convertView。如果没有先将其设置为标记,则无法检索ViewHolder

修改

除了你的代码似乎没问题,我最好的猜测是问题在于HorizontalListView的实现。

我查看了它的源代码(Horizo​​ntalListView.java),如果你可以尝试使用源代码,请在调用mRemovedViewQueue之前尝试检查mAdapter.getView是否为空。如果是,则为没有妥善处理回收。