【问题标题】:Why is getCount called so many times in PagerAdapter?为什么在 PagerAdapter 中调用了这么多次 getCount?
【发布时间】:2013-01-19 06:10:23
【问题描述】:

我今天注意到 PagerAdapter 被调用了很多次。缓慢滚动页面时,我数了 393。我看到了this question,但它并没有真正为我提供一个好的答案。

  1. 这是正常行为吗
  2. 如果是这样,为什么 getCount 方法被如此频繁地调用?

为了清楚起见,我正在寻找比所提供问题中的答案更广泛的答案。 我也意识到我需要保持它尽可能快,并且我无法控制它的调用方式,但这不是这里的问题。

【问题讨论】:

  • 当你阅读源代码到ViewPager,为了找到你的问题的答案,你学到了什么?
  • @CommonsWare 我了解到它用于多个地方。特别是 OnTouchEvent。我猜这是每次我移动寻呼机时都会调用它的地方。这是正确的吗?
  • 我没看过这方面的ViewPager。但是,如果在每个触摸事件上都调用 getCount(),那肯定可以解释高调用次数。
  • @Qw4z1 我也面临同样的问题。在我的情况下,onmeasure 被多次调用,这反过来又调用 populate()

标签: android android-viewpager android-pageradapter


【解决方案1】:

正如你所总结的,它在 onTouchEvent 中被大量使用。每当您与屏幕交互时都会调用 OnTouchEvent,这意味着触摸移动和释放事件。仅移动一个像素可能会调用此方法。

没有更多的解释,它只是它的实现方式。通常adapter.getCount 是用List.getSize 或Cursor.getCount 之类的东西来实现的。并且开销几乎为零。如果这是一个问题,请优化您的 ListAdapter.getCount 方法,缓存计数或类似的东西。只在需要时在那里做复杂的事情,并缓存结果直到它变得无效。

【讨论】:

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