Android 调用ListView getView()太频繁

Android 调用ListView getView()太频繁,android,listview,adapter,Android,Listview,Adapter,我有一个带有自定义适配器的列表视图。老实说,我的屏幕上同时出现了很多,我的Tegra 3设备开始落后,这让我很困惑。。。我发现在每个列表视图的适配器中,对所有可见行每隔时间对屏幕上运行的任何动画调用getView()方法。这让我每秒打几百个电话!更详细地说,这些调用大多是由于measure()和onMeasure()调用了ListViews的父对象,并且-这是tke键-它们是无用的,因为我的ListViews的所有布局 有常数大小 所以我的问题是:如何消除这些呼叫?当然,我不想进行适当的调用(通

我有一个带有自定义
适配器的
列表视图
。老实说,我的屏幕上同时出现了很多,我的Tegra 3设备开始落后,这让我很困惑。。。我发现在每个
列表视图
适配器
中,对所有可见行每隔时间对屏幕上运行的任何动画调用
getView()
方法。这让我每秒打几百个电话!更详细地说,这些调用大多是由于
measure()
onMeasure()
调用了
ListView
s的父对象,并且-这是tke键-它们是无用的,因为我的
ListView
s的所有布局 有常数大小

所以我的问题是:如何消除这些呼叫?当然,我不想进行适当的调用(通过向
适配器
notifyDataSetChanged()
添加项而导致)


我已经尝试了几乎所有的方法,但是要么整个列表无法自动绘制(当我重写它时,它是
onMeasure()
,并且在不调用
super.onMeasure()
)的情况下强制返回const size),要么在某个时候停止更新。

您是如何实现getView()方法的?如果您以正确的方式实施,应该几乎没有滞后

看看这段非常棒的视频:

  • 幻灯片:

正如罗曼所说,与它合作,而不是反对它。最好不要使用measure(),而是专注于您的适配器。

这就是实现ListView的方式。
。。我认为这不会导致性能开销。。只要你在那里办事得当

例如

不要在GetView方法中实例化
LayoutInflator
,而是在类级别执行


仅当
convertView==null
或仅返回
convertView
时,才对视图充气。。膨胀视图是一个代价高昂的过程……

其根本原因是
ListView.onMeasure()
调用
AbsListView.obtainView()
,这将从列表适配器请求视图。因此,如果通过动画重新测量视图,您的性能将非常差。

正如您所说,这些调用是由于
measure()
onMeasure()引起的
调用
列表视图
家长,我确信您正在使用
height=wrap\u content
以及
wrap\u content
在高度上,如果您的
列表视图
的高度发生了变化,您将不停地检查

因此解决方案是放置
height=fill\u parent

我希望这对你有帮助。

好吧,现在我在应用程序级别上做了,但这对我来说毫无帮助,唉。当然,我会循环使用视图,尽量避免膨胀。@FenixVoltres。。你有什么问题吗。。?或者你只是想避免多个CALS,,…问题是我的活动出现了延迟(在最新的设备上!),这是由大量的
measure()
onMeasure()
调用适配器内部的视图(我看到它)所导致的。感谢链接,我会关注它,但我认为我无法优化我的getView()任何方式的方法:/还没有找到一个好的解决方案,但给我最多的是你链接中的一部电影-所以我将把它标记为一个答案。谢谢,这个视频非常有用(加速getView的真正好提示)。我已经冒昧地修复了链接(它被破坏了),并为幻灯片添加了一个链接(对于那些不想看整整一个小时的人来说)。该死,这太正确了!谢谢。我有“包装内容”,也有同样的问题。你救了我。