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

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

那么在Android中这样做的方法是什么呢? TableLayoutListView吗?

最佳答案

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

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

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

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

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

10-07 19:17
查看更多