【问题标题】:Why does getCount in adapter is being called so many times?为什么适配器中的 getCount 被调用了这么多次?
【发布时间】:2012-11-26 10:24:47
【问题描述】:

我有一个自定义列表,需要几分钟才能显示出来。当我试图检查问题出在哪里时,我看到即使列表中只有一项,getCount() 方法也被调用了 5 次,getVIew() 被调用了一次,然后 getCount() 是被叫到更多时间。 总体上 getCount() 被调用了 7 次。这有意义吗?

谢谢!

【问题讨论】:

  • 请提供代码示例!
  • 显示代码。我更怀疑 getCount() 让你的列表爬行
  • 你在滚动吗?提供更多数据
  • 滚动没问题。我的意思是列表视图出现在屏幕上需要时间。我希望尽快附上代码。 Tnx
  • 仍未解决...我的帮助将不胜感激。

标签: android listview listadapter


【解决方案1】:

您可以看到hereAdapter.getCount() 方法的不同内部调用。

但您必须记住,您无法控制如何调用此方法。

它可以被多次调用,这就是为什么你必须尽可能快地保持它。

【讨论】:

  • 抱歉,我没理解“尽可能快”的部分——这个方法只返回数组大小对吗?
  • 当然。但是您可以根据需要覆盖它。这样做的目的是确保您不会在其中进行任何昂贵的计算,因为它可能会在 UI 线程中被多次调用。
  • 我没有覆盖它。我所做的就是返回数组大小。所以我想这意味着 listView 出现的时间与被多次调用的 getCount() 无关?
  • 可能不是...您可以使用 DDMS 分析工具查看实际消耗 CPU 的内容
【解决方案2】:

getCount() 被调用了太多次,因为App-USER 可以随时update its list(可以在其存储中添加数据),这就是我们返回(storage).size()(元素总数)的原因。

【讨论】:

    【解决方案3】:

    您应该有一个搜索按钮,可以在搜索时更新适配器。该方法被调用多次绘制视图,如果在该方法中你有一个setAdapter,那么getCount将被调用多次,最终将返回0并且你的视图不会被填充。

    【讨论】:

      【解决方案4】:

      适配器getCount()方法将在以下情况下被调用。

      1) 将适配器设置为列表视图/网格视图时。

      2) 当我们在 Adapter 上调用 notifyDataSetChanged 时。

      因此,检查您的代码,您可能会花费更多时间或递归地执行上述情况..

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-27
        • 2011-05-15
        • 1970-01-01
        • 1970-01-01
        • 2020-01-20
        • 2012-04-23
        相关资源
        最近更新 更多