ListView 还是 TableLayout?

Posted

技术标签:

【中文标题】ListView 还是 TableLayout?【英文标题】:ListView or TableLayout? 【发布时间】:2012-08-22 13:57:36 【问题描述】:

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

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

那么在 Android 中实现这一点的方法是什么? TableLayoutListView?

【问题讨论】:

您能更清楚地了解您想要实现什么样的目标吗? 我想在 iPhone 表格的自定义单元格中显示动态内容,如图像和文本查看类似格式 在 android 中这通常在 listview 中完成,只是它简单易用的表格布局,您必须手动创建或膨胀每个 -- @droidhot 那么我应该使用 listView 进行自定义视图吗? 当然你可以这样做,因为不像 iphone android 支持 listview 可以动态填充检查(惰性列表)你会更好地理解 【参考方案1】:

正如其他人在 cmets 中已经说过的那样,您需要先明确定义您想要做什么,然后再具体决定使用哪种类型的布局。但是,我当然可以理解尝试决定使用哪种类型的布局类所引起的混乱,因为通常有几个可供选择以实现相同的目标。例如,要创建一个垂直滚动的项目列表,您可能首先选择一个垂直的LinearLayout,然后将其放在ScrollView 中。但另一方面,要获得类似的最终结果,您可以将ListView 与合适的Adapter 一起使用。

同样,要显示可以垂直滚动的项目网格,您可以在ScrollView 中使用TableLayout。或者,使用GridView 也可以获得类似的结果,同样通过合适的Adapter 提供数据。

现在,第一个关键区别是:LinearLayoutTableLayout 等类要求您以 XML 布局或以编程方式在代码中提供子元素。像ListViewGridView(以及其他几个)这样的类非常不同,因为它们是android.widget.AdapterView 的子类。 AdapterView 类的特殊之处在于Adapter 用于将数据绑定到它们。因此,回到垂直项目列表的示例,如果您根据一些数组数据在 LinearLayout 中显示一组子列表项,则必须以编程方式创建并添加子 Views 到其中LinearLayout 基于数组数据。另一方面,对于ListView,代表子项的单个Views 由合适的Adapter 提供。因此,不是您以编程方式用所有子项填充布局(例如LinearLayoutTableLayout 的情况),而是基于Adapter 的布局调用Adapter 来获取子@987654346 @s 在需要时使用。

最后一点是我认为您应该了解基于Adapter 的布局的下一个关键区别:在大量数据滚动到视图之外的情况下,它们在显示大量数据方面效率更高。例如,ListView 用于显示大型滚动项目列表比使用所有项目填充 LinearLayout 并将其放入 ScrollView 更有效。这种效率的原因是基于AdapterView 的布局通常不会同时包含所有子Views。相反,当用户滚动列表时,现有的子视图被Adapter“回收”或“转换”以显示下一个子元素。举个例子来说明这一点:您需要一个包含 100 个项目的滚动垂直列表。但是,屏幕可能只够一次显示 7 个。假设您在 ScrollView 中使用 LinearLayout 来显示 100 个列表项。这意味着 LinearLayout 容器有 100 个子 Views。这些孩子总是出现在布局中,并且需要在滚动事件期间由系统处理,即使一次只能在屏幕上看到七个。这需要额外的 CPU 时间、大量 RAM,并且滚动可能会很慢。现在,使用 ListView,布局可能只包含 7 或 8 个子 Views。当用户滚动时,这些子 Views 将由您绑定数据的 Adapter 动态转换或重新实例化。用户将体验到更快、更流畅的滚动操作。从编程的角度来看,通过Adapter 绑定数据列表通常要优雅得多。当您处理Bitmaps 的滚动列表或网格时,Android 设备的内存限制也意味着使用AdapterView 非常重要。

请记住,在回答这个问题时,我假设您正在尝试显示可滚动的项目的垂直或表格列表,可能包括 Bitmaps,我专注于类型用于实现该数据的布局和滚动的布局。 LinearLayoutTableLayout 等布局类是重要的类,您将一直使用它们来为您的应用程序形成单独的布局构建块。如果保证您的整个列表都适合屏幕并且不能滚动,那么使用Adapter 的额外复杂性(并不是说它真的那么复杂)可能毫无意义,您可能然后只想使用TableLayout 或其他。

【讨论】:

嘿,感谢您的洞察力,我最有可能解析 xml/json 提要并在表格中显示它们。大多数图像和文本都使用自定义单元格显示。这就是我在 iPhone 中所做的。所以我想我会在android中使用listViews。非常感谢。 @Trevor:很好的解释,感谢您的回答。 2018 年你的最新答案是什么?【参考方案2】:

Android 等价于 ios UITableViewRecyclerView

它非常强大,可以填充来自不同来源的数据,具体取决于您附加到它的Adapter 的类型。你可能想看看这个RecyclerView codelab。

【讨论】:

【参考方案3】:

1.如果您想以列表形式将dynamic data 放在CUSTOM VIEW 上,那么ListViewBaseAdapterArrayAdapter 是要走的路.....

2. TableLayout 将有完全不同的用途,我主要用它来显示需要以堆栈形式显示的数据..(即一个在另一个之上....)

请参阅以下链接以快速了解和实施:

http://www.ezzylearning.com/tutorial.aspx?tid=1763429

http://www.vogella.com/articles/AndroidListView/article.html

【讨论】:

以上是关于ListView 还是 TableLayout?的主要内容,如果未能解决你的问题,请参考以下文章

在表格布局中显示来自 sqlite 的数据,

2.2.3 TableLayout(表格布局)

android:TableLayout表格布局详解

TableLayout - 删除列之间的空间

TableLayout

TableLayout 位于导航栏后面