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