Java 为每个列表项创建自定义视图的最佳方法

Java 为每个列表项创建自定义视图的最佳方法,java,android,performance,implementation,Java,Android,Performance,Implementation,当我回顾并原型化我的android项目时,我注意到有一个视图包含一个非常定制的项目列表。我已经想出了我计划使用的大多数工具,但我需要一些建议 我有一个项目列表,其中可以包含照片,一些文字的权利,一个图像的底部和更多的文字下面。我知道你很困惑。每一个都可能出现在一个项目中。唯一将永远存在的是标题 那么我的问题是——创建每个自定义列表项视图的最佳方法是什么?我想我必须使用它来创建每个视图。但在创建每个视图时,最好是1)动态创建视图并添加图像(例如,如果存在),还是2)创建包含所有可能元素的xml文件

当我回顾并原型化我的android项目时,我注意到有一个视图包含一个非常定制的项目列表。我已经想出了我计划使用的大多数工具,但我需要一些建议

我有一个项目列表,其中可以包含照片,一些文字的权利,一个图像的底部和更多的文字下面。我知道你很困惑。每一个都可能出现在一个项目中。唯一将永远存在的是标题

那么我的问题是——创建每个自定义列表项视图的最佳方法是什么?我想我必须使用它来创建每个视图。但在创建每个视图时,最好是1)动态创建视图并添加图像(例如,如果存在),还是2)创建包含所有可能元素的xml文件并根据项目隐藏它们

我赞成第二条。您可以创建一个包含所有项目的xml布局,然后编写一个列表适配器,在其中可以根据需要隐藏和显示项目。这样,如果您需要更改布局,只需调整xml即可。

我会选择#2。您可以创建一个包含所有项目的xml布局,然后编写一个列表适配器,在其中可以根据需要隐藏和显示项目。这样,如果需要更改布局,只需调整xml即可。

在性能方面#2更好,因为可以将ListView提供给适配器的convertView作为getView()参数重用。要允许平滑的ListView滚动,必须避免在getView()调用期间创建任何视图

您可以在中找到getView()的高效实现。有两个要点:

  • 在可用时重用convertView
  • 使用附加到视图的ViewHolder,以避免在每次调用getView()时再次查找子视图
就性能而言#2更好,因为您可以将ListView提供给适配器的convertView作为getView()参数重用。要允许平滑的ListView滚动,必须避免在getView()调用期间创建任何视图

您可以在中找到getView()的高效实现。有两个要点:

  • 在可用时重用convertView
  • 使用附加到视图的ViewHolder,以避免在每次调用getView()时再次查找子视图

谢谢,这正是我想要的。使用getView似乎是正确的解决方案,对吗?谢谢,这正是我倾向于的。使用getView似乎是正确的解决方案,对吗?你有一个例子吗?我本来打算做#2,但现在我很感兴趣,因为我认为一旦创建了一个视图,就不能重用它。任何代码示例都很好。您有示例吗?我本来打算做#2,但现在我很感兴趣,因为我认为一旦创建了一个视图,就不能重用它。任何代码示例都会很好。