Android:避免在适配器中从getView()发出不需要的调用

时间:2012-11-06 11:43:31

标签: android performance listview

我搜索了几个小时但没找到合适的解决方案。 我想做什么:在我的ListFragment中,我使用onListItemClick(...)方法来处理点击事件。在这里,我更改了行项目的背景。但不幸的是,每次调用onListItemClick(...)时,也会调用适配器中的getView()并更新所有8个可见行项。这花费了很多时间:0.5秒。因为行布局非常复杂(2个图像,8个TextViews)。 所以我想只更新被点击的行。我想使用this solution,但是当其他7行项目仍然更新时,这没有任何效果。 我已经按照these advices来加快列表速度,但它仍然会变慢。

感谢任何帮助,想法和想法。 :) 谢谢!

[编辑]

感谢CommensWare为我提供了一些新想法。我现在做的是检查traceview说的是什么。结果是,延迟分为两部分。延迟的前300ms采用“FastXMLSerialzier.escapeAndAppendString()”进行超过22.000次调用。这似乎很多!在下半部分,许多(可能全部)onMeasure() - 视图和布局的方法被调用。

我尝试了什么: 我在适配器中用静态虚拟值填充每个textview,并在加载图像时排除部分。它没有任何变化,traceview显示相同的图片。 在第二次尝试中,我查看了list列表项的LinearLayout并替换了我用“match_parent”找到的每个“wrap_content” - 没有。还是一样。

我仍然对你的想法和提示持开放态度。 :)

1 个答案:

答案 0 :(得分:0)

您无法控制调用getView()的时间和频率。

如果您生成8行Views真的需要500毫秒,那么您的代码就会出现问题。您可以使用Traceview来确定您花时间的具体位置,这样您就可以尝试做一些事情来提高性能(例如,缓存)。