ListView或TableLayout?

Aka*_*tra 25 android custom-cell android-listview android-adapter android-tablelayout

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

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

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

Tre*_*vor 78

正如其他人已经在评论中所说的那样,在对具体使用的布局类型做出具体决定之前,您需要先明确定义您想要做的事情.但是,我当然可以理解由于试图决定使用哪种类型的布局类而产生的混淆,因为通常有几种可供选择来实现相同的目标.例如,要创建垂直滚动的项目列表,您可能首先选择一个垂直LinearLayout,然后将其放入a ScrollView.但另一方面,要获得类似的最终结果,您可以使用ListView合适的Adapter.

同样,要显示可以垂直滚动的项目网格,您可以使用TableLayout内部a ScrollView.或者,通过使用a GridView,再次通过合适的数据提供数据,可以实现类似的结果Adapter.

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

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

请记住,在回答这个问题时,我假设您正在尝试显示可滚动的项目的垂直或表格列表,可能包括Bitmaps,并且我专注于您所使用的布局类型用于实现该数据的布局和滚动.布局类一样LinearLayout,TableLayout但是等,你将使用所有的时间,形成独特的布局积木为您的应用重要的类.如果你的整个列表是保证以适应屏幕并不会滚动,然后使用一个额外的复杂性Adapter(不在于它真的那么复杂)可能是毫无意义的,然后你可能只是想使用TableLayout或什么的.

  • 嘿谢谢你的见解,我最有可能做的是解析xml/json提要并在表格中显示它们.大多数图像和文本都显示自定义单元格.这就是我在iPhone中所做的.所以我想我会去android中的listViews.谢谢一堆. (2认同)

key*_*fer 6

而Android相当于iOS的UITableViewRecyclerView.

它功能非常强大,可以根据您连接的适配器类型填充来自不同来源的数据.您可能想看一下这个RecyclerView codelab.