0

我正在为我的应用程序制作一种 Pulse 的 UI。为此,我使用这里HorizontalListView给出的类。但是,此类存在性能问题并提供明显的滞后。

为了确认这一点,我使用它进行了评估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;
 }

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

4

1 回答 1

1

好像你从来没有在为空convertView.setTag(viewHolder);的情况下打电话。如果不先将其设置为标签,则convertView无法检索。ViewHolder

编辑:

除了您的代码看起来不错之外,我最好的猜测是问题出在HorizontalListView.

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

于 2013-05-06T05:35:30.420 回答