Android GetView方法和convertView错误概念?
我已经阅读了好几次关于GetView DataAdapter类的android文档。据我所知,如果我有一个同质列表,其中每个项目都只是一个文本视图,所有项目都在屏幕内(不可能滚动),那么就不会有任何视图循环,因此我应该会收到4个对GetView的调用,convertView为空。嗯,这不是发生在我身上的事。第一次convertView为null,但其他3个已创建项的值相同。列表填充正确,但我想了解为什么会发生这种情况。如果有人能帮助我,我将非常感激 我相信Android总是试图回收视图,因为这将使用户数量增加得最快。所有视图是否都适合列表的可见视口并不重要。视图的膨胀/创建非常昂贵,这就是安卓希望尽可能多地回收的原因 可以保证传递到GetView的视图将是相同的视图类型(在数据适配器中定义)或null。如果为null,则需要为该视图类型创建新视图,否则应尝试重用传入的视图。对于文本视图的同质列表,非常简单:Android GetView方法和convertView错误概念?,android,android-layout,Android,Android Layout,我已经阅读了好几次关于GetView DataAdapter类的android文档。据我所知,如果我有一个同质列表,其中每个项目都只是一个文本视图,所有项目都在屏幕内(不可能滚动),那么就不会有任何视图循环,因此我应该会收到4个对GetView的调用,convertView为空。嗯,这不是发生在我身上的事。第一次convertView为null,但其他3个已创建项的值相同。列表填充正确,但我想了解为什么会发生这种情况。如果有人能帮助我,我将非常感激 我相信Android总是试图回收视图,因为这将
if (convertView == null)
{
TextView tv = new TextView();
....
tv.setText("First Item");
}
else
{
TextView tv = (TextView) convertView;
...
tv.setText("Recycled Item");
}
为简单起见,您总是可以返回一个新视图,而不是使用convertView,但性能并没有那么好。确切地说,这是基于从getItemViewType()返回的值。那么,为什么列表中会显示4个不同的文本呢?如果它是allways recycling first创建的,那么我是否会改变原始视图的文本,从而拥有一个包含4个项目的列表,并引用同一视图?我有点搞砸了。Android引擎盖下的视图引用数量并不等于列表中的项目数量。一旦您将视图引用返回到Android,您就不应该再考虑它了。Android将负责视图引用的生命周期。它可能只是将视图渲染为位图,然后因为它不需要视图对象,所以会将其返回以供循环使用。或者它可以快速复制它持有一段时间的视图。如果你对Android源代码的工作原理感到好奇的话,可以看看它。我打赌这很有趣。@Notbad您仍然可以向它们添加
onClickListener()
。最简单的方法是使用ListView.setOnItemClickListener()
,但也可以在每个TextView上设置一个侦听器,然后再将其返回到getView()方法中。@不错,Tim是正确的。这应该和回收一起工作。如果您在这个问题中发布您的代码,我们可以查看它,也许可以诊断出问题所在。我已经尝试[在这里][1]解释listview和回收机制是如何工作的[1]: