26

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

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

那么在Android中这样做的方法是什么?TableLayout还是ListView

4

3 回答 3

80

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

同样,要显示可以垂直滚动的项目网格,您可以使用 a TableLayoutinside a ScrollView。或者,使用GridView, 也可以通过合适的Adapter.

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

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

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

于 2012-08-28T07:46:28.737 回答
7

相当于 iOS 的 AndroidUITableViewRecyclerView.

它非常强大,可以填充来自不同来源的数据,具体取决于您附加到它的适配器的类型。您可能想看看这个RecyclerView 代码实验室

于 2012-08-28T07:18:40.033 回答
2

1.如果你想dynamic dataCUSTOM VIEW一个列表的形式上,那么ListViewBaseAdapterorArrayAdapter是要走的路.....

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

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

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

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

于 2012-08-28T07:20:40.277 回答