ListView还是TableLayout?

26

我现在真的很困惑该学哪个。我是一名iPhone应用程序开发人员,现在正在学习Android开发。

我学会了如何使用Adapter和静态字符串数组来使用ListView。 我习惯于在iPhone上使用自定义单元格,主要用于在TableView中显示动态内容,如图像和文本。

那么在Android中实现这个功能,应该选择TableLayout还是ListView呢?


你能否更清楚地说明你想要实现哪些方面的内容? - James Fazio
我想在iPhone的tableView格式中展示动态的内容,比如图片和文本,放在自定义单元格中。 - Akash Malhotra
在Android中,这通常只在ListView中完成,因为它很容易使用。如果要使用TableLayout,则必须手动创建或填充每个单元格。 - Athul Harikumar
@droidhot 那我是不是应该使用自定义视图和列表视图? - Akash Malhotra
当然可以这样做,因为与 iPhone 不同,Android 支持可以动态填充的 ListView,请查看(懒加载列表),您会更好地理解。 - Athul Harikumar
3个回答

81

如评论中其他人已经说过的,您需要在做出具体决策之前明确定义您想要做什么,然后选择使用哪种类型的布局。但是,我能够理解从尝试决定要使用哪种类型的布局类而产生的困惑,因为通常有几种可供选择以达到相同的目标。例如,要创建一个垂直滚动的项目列表,您可能首先会选择使用垂直的LinearLayout,然后将其放置在ScrollView中。但另一方面,要实现类似的最终效果,您可以使用ListView和适当的Adapter

同样地,要展示能够垂直滚动的项目网格,您可以在ScrollView内使用TableLayout。或者,通过使用适当的Adapter,也可以通过使用GridView来实现类似的结果。

现在,第一个关键区别是:像LinearLayoutTableLayout这样的类需要您在XML布局中提供子元素,或者通过编程方式在代码中提供子元素。像ListViewGridView(以及其他一些)这样的类则非常不同,因为它们是android.widget.AdapterView的子类。关于AdapterView类的特殊之处在于,它们使用Adapter将数据绑定到它们上面。所以,回到垂直列表项的示例,如果您要在LinearLayout中显示一组基于某个数组数据的子列表项,则必须根据数组数据编程地创建并添加子View到该LinearLayout中。而另一方面,使用ListView时,代表子项的单个View会从适当的Adapter中提供。因此,与您编程填充所有子项的布局不同(例如,对于LinearLayoutTableLayout),基于适配器的布局会调用Adapter,在需要子View时获取它们。最后一个要点是我认为您应该了解有关基于适配器的布局的下一个关键区别:它们在显示大量数据时更加高效,特别是在很多数据滚动出视图时。例如,使用ListView 显示大型滚动列表比将所有项填充到 LinearLayout 中并将其放入ScrollView 中要更有效率。这种效率的原因是基于AdapterView的布局通常不会一次包含所有子View。相反,随着用户滚动列表,现有的子视图将被适配器回收或转换以显示下一个子元素。举例说明:您想要一个具有100个项目的垂直滚动列表。屏幕可能只足够大以同时显示7个。想象一下,您使用一个LinearLayoutScrollView中显示100个列表项。这意味着LinearLayout容器有100个子Views。这些子项始终存在于布局中,并且需要在滚动事件期间由系统处理,即使一次只能在屏幕上查看7个。这需要额外的CPU时间,相当多的RAM,并且滚动可能会变得缓慢。而使用ListView,布局只会包含大约7或8个子Views。随着用户滚动,那些子Views将由适配器动态转换或重新实例化,并通过其绑定数据的适配器使用户体验到更快,更流畅的滚动操作。从编程的角度来看,通常通过适配器来绑定数据列表更加优雅。当您处理滚动的Bitmap列表或网格时,Android设备的内存限制也意味着几乎必须使用AdapterView。记住,在回答这个问题时,我假设您想展示一个可以滚动的垂直或表格列表,可能包括位图,我会重点考虑您用于实现布局和滚动数据的布局类型。然而,像 LinearLayoutTableLayout 等布局类是您将经常使用的重要类,用于形成应用程序的单个布局构建块。如果您的整个列表保证能够适合屏幕并且不可滚动,则使用 Adapter 的额外复杂性(尽管它实际上并不复杂)可能是无意义的,那么您可能只需使用 TableLayout 或其他布局即可。

3
谢谢您的见解。我最有可能做的是解析XML/JSON数据源并将它们显示在表格单元中。大多数情况下,图像和文本会显示在自定义单元格中。这是我在iPhone上所做的事情。因此,我想我会选择在Android上使用ListView。非常感谢。 - Akash Malhotra
@Trevor:非常好的解释,感谢您的回答。您对2018年的更新答案会是什么? - user1090751
1
非常感谢你,Trevor。你节省了我的时间。 - Igor

7

Android中相当于iOS的UITableViewRecyclerView

它非常强大,可以根据您附加到它上面的Adapter类型从不同的数据源填充数据。您可能想查看这个RecyclerView codelab


2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接