ListView 还是 TableLayout?
Posted
技术标签:
【中文标题】ListView 还是 TableLayout?【英文标题】:ListView or TableLayout? 【发布时间】:2012-08-22 13:57:36 【问题描述】:我现在真的很困惑该学哪一个。我是一名 iPhone 应用开发人员,现在正在学习 android 开发。
我已经学会了如何使用 ListView
和使用 Adapter
的静态字符串数组。我习惯在 iPhone 中使用自定义单元格,主要用于在 TableView
s 中显示动态内容,例如图像和文本。
那么在 Android 中实现这一点的方法是什么? TableLayout
或 ListView
?
【问题讨论】:
您能更清楚地了解您想要实现什么样的目标吗? 我想在 iPhone 表格的自定义单元格中显示动态内容,如图像和文本查看类似格式 在 android 中这通常在 listview 中完成,只是它简单易用的表格布局,您必须手动创建或膨胀每个 -- @droidhot 那么我应该使用 listView 进行自定义视图吗? 当然你可以这样做,因为不像 iphone android 支持 listview 可以动态填充检查(惰性列表)你会更好地理解 【参考方案1】:正如其他人在 cmets 中已经说过的那样,您需要先明确定义您想要做什么,然后再具体决定使用哪种类型的布局。但是,我当然可以理解尝试决定使用哪种类型的布局类所引起的混乱,因为通常有几个可供选择以实现相同的目标。例如,要创建一个垂直滚动的项目列表,您可能首先选择一个垂直的LinearLayout
,然后将其放在ScrollView
中。但另一方面,要获得类似的最终结果,您可以将ListView
与合适的Adapter
一起使用。
同样,要显示可以垂直滚动的项目网格,您可以在ScrollView
中使用TableLayout
。或者,使用GridView
也可以获得类似的结果,同样通过合适的Adapter
提供数据。
现在,第一个关键区别是:LinearLayout
和 TableLayout
等类要求您以 XML 布局或以编程方式在代码中提供子元素。像ListView
和GridView
(以及其他几个)这样的类非常不同,因为它们是android.widget.AdapterView
的子类。 AdapterView
类的特殊之处在于Adapter
用于将数据绑定到它们。因此,回到垂直项目列表的示例,如果您根据一些数组数据在 LinearLayout
中显示一组子列表项,则必须以编程方式创建并添加子 View
s 到其中LinearLayout
基于数组数据。另一方面,对于ListView
,代表子项的单个View
s 由合适的Adapter
提供。因此,不是您以编程方式用所有子项填充布局(例如LinearLayout
或TableLayout
的情况),而是基于Adapter
的布局调用Adapter
来获取子@987654346 @s 在需要时使用。
最后一点是我认为您应该了解基于Adapter
的布局的下一个关键区别:在大量数据滚动到视图之外的情况下,它们在显示大量数据方面效率更高。例如,ListView
用于显示大型滚动项目列表比使用所有项目填充 LinearLayout
并将其放入 ScrollView
更有效。这种效率的原因是基于AdapterView
的布局通常不会同时包含所有子View
s。相反,当用户滚动列表时,现有的子视图被Adapter
“回收”或“转换”以显示下一个子元素。举个例子来说明这一点:您需要一个包含 100 个项目的滚动垂直列表。但是,屏幕可能只够一次显示 7 个。假设您在 ScrollView
中使用 LinearLayout
来显示 100 个列表项。这意味着 LinearLayout
容器有 100 个子 Views
。这些孩子总是出现在布局中,并且需要在滚动事件期间由系统处理,即使一次只能在屏幕上看到七个。这需要额外的 CPU 时间、大量 RAM,并且滚动可能会很慢。现在,使用 ListView
,布局可能只包含 7 或 8 个子 View
s。当用户滚动时,这些子 View
s 将由您绑定数据的 Adapter
动态转换或重新实例化。用户将体验到更快、更流畅的滚动操作。从编程的角度来看,通过Adapter
绑定数据列表通常要优雅得多。当您处理Bitmap
s 的滚动列表或网格时,Android
设备的内存限制也意味着使用AdapterView
非常重要。
请记住,在回答这个问题时,我假设您正在尝试显示可滚动的项目的垂直或表格列表,可能包括 Bitmap
s,我专注于类型用于实现该数据的布局和滚动的布局。 LinearLayout
、TableLayout
等布局类是重要的类,您将一直使用它们来为您的应用程序形成单独的布局构建块。如果保证您的整个列表都适合屏幕并且不能滚动,那么使用Adapter
的额外复杂性(并不是说它是真的那么复杂)可能毫无意义,您可能然后只想使用TableLayout
或其他。
【讨论】:
嘿,感谢您的洞察力,我最有可能解析 xml/json 提要并在表格中显示它们。大多数图像和文本都使用自定义单元格显示。这就是我在 iPhone 中所做的。所以我想我会在android中使用listViews。非常感谢。 @Trevor:很好的解释,感谢您的回答。 2018 年你的最新答案是什么?【参考方案2】:Android 等价于 ios UITableView
是 RecyclerView
。
它非常强大,可以填充来自不同来源的数据,具体取决于您附加到它的Adapter 的类型。你可能想看看这个RecyclerView codelab。
【讨论】:
【参考方案3】:1.如果您想以列表形式将dynamic data
放在CUSTOM VIEW
上,那么ListView
与BaseAdapter
或ArrayAdapter
是要走的路.....
2. TableLayout
将有完全不同的用途,我主要用它来显示需要以堆栈形式显示的数据..(即一个在另一个之上....)
请参阅以下链接以快速了解和实施:
http://www.ezzylearning.com/tutorial.aspx?tid=1763429
http://www.vogella.com/articles/AndroidListView/article.html
【讨论】:
以上是关于ListView 还是 TableLayout?的主要内容,如果未能解决你的问题,请参考以下文章