【问题标题】:Android: avoid unwanted calls from getView() in an adapterAndroid:避免来自适配器中 getView() 的不必要调用
【发布时间】:2012-11-06 11:43:31
【问题描述】:

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

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

[编辑]

感谢 CommensWare 给了我一些新的想法。我现在所做的是检查 traceview 的内容。结果是,延迟分为两部分。延迟的前 300 毫秒采用“FastXMLSerialzier.escapeAndAppendString()”,调用次数超过 22.000。这似乎很多!在后半部分,视图和布局的许多(可能是全部)onMeasure() 方法被调用。

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

我仍然愿意接受您的想法和提示。 :)

【问题讨论】:

  • 您是在每次调用 getView 时都在膨胀视图,还是在重用作为参数传递给 getView 的视图?
  • 我正在使用 convertView 来避免新的膨胀视图,就像我在问题的第一个链接中提到的那样。

标签: android performance listview


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2022-08-03
    • 1970-01-01
    • 1970-01-01
    • 2011-06-28
    • 2019-09-09
    • 2013-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多