ScrollView 和 ListView 的区别

Posted

技术标签:

【中文标题】ScrollView 和 ListView 的区别【英文标题】:Difference between ScrollView and ListView 【发布时间】:2012-04-06 22:04:31 【问题描述】:

谁能解释一下滚动视图和列表视图的区别?什么时候用哪一个?哪个更高效?

【问题讨论】:

【参考方案1】:

ScrollView用于放置不同或相同的子视图或布局,都可以滚动。

ListView 用于将相同的子视图或布局放置为多个项目。所有这些项目也是可滚动的。

Simply ScrollView 既适用于同质集合,也适用于异构集合。 ListView 仅用于同类集合。

【讨论】:

基于适配器,ListView 可以与 ScrollView 一样异构。不同之处在于 ListView 的内容由适配器支持,而 ScrollView 与单个 View/ViewGroup 子一起工作,当然这也可以通过代码构建。 这个答案实际上忽略了一个重要的点,即在 ListView 中,视图是按需创建的。 ListView 中的视图被回收,并且视图层次结构中的视图永远不会超过屏幕上可以显示的视图。使用 ScrollView,您的所有视图都在内存中,并且在层次结构中,即使它们没有显示在屏幕上。您不会获得 View 回收,也没有适配器支持。 "ListView is only for homogeneous collection" :这点是不正确的,误导了开发者。 ListView 也可以从 api 级别 1 开始填充异构视图。【参考方案2】:

它们完全不同。

ScrollView 是一个简单的滚动容器,可用于滚动放入其中的任何内容,可能是项目列表,也可能不是。

http://developer.android.com/reference/android/widget/ScrollView.html

ListView 是专门为保存列表而设计的,其中项目通常看起来相同(或至少遵循一种模式,例如部分标题)。 ListView 还设计用于连接某种数据源、SQLite、数组、内容提供程序等。ListView 可以扩展以处理大量列表项。

http://developer.android.com/resources/tutorials/views/hello-listview.html

如果您有需要在列表中显示的数据,请使用 ListView。如果您只需要滚动内容,那么 ScrollView 可能就足够了。

【讨论】:

【参考方案3】:

列表视图:-

在 ListView 中,您可以轻松管理要在列表中显示的 xml 中的项目的布局。

您需要告诉适配器您想要在显示列表中显示多少项目。

您可以通过重写 Adapter 的 getItemViewType() 方法,根据您的要求设计同构视图和异构视图。

在 ListView 中,列表中的项目是根据屏幕大小创建的。即在运行时滚动列表时,会创建多少个项目可以出现在屏幕上。显示一次的视图在移出屏幕时会被缓存,当列表滚动回之前的状态时,会显示相同的视图,但这次视图不是创建的,而是从缓存中获取的。

滚动视图:-

缓存概念不适用于 ScrollView。

所有视图在进入屏幕时立即创建,并且在滚动时移出屏幕时不会被缓存。它们存在于内存(主)中,可能导致内存泄漏,因为创建的对象数量不会被垃圾收集器销毁,因为它们被引用直到您在同一页面上。

尽管您可以创建同质视图和异构视图。如果您的列表中要显示更多项目,则无论您是使用 xml 设计还是使用 Java 代码动态创建,管理布局都会很乏味。

如果您有一个不包含项目列表的页面,例如注册表单、预订表,但该视图大于屏幕大小,则最好使用滚动视图,然后将 ScrollView 作为父视图还请记住,ScrollView 可以只有一个直接子布局/视图。

【讨论】:

【参考方案4】:

ScrollView 只是将其内容放在一个可滚动的容器中,您只能通过向其添加视图来编辑它的内容。

ListView 是一个使用适配器的类,它处理为您的数据对象创建视图,您只需要编辑数据,并且布局修改由适配器自动完成。

当您的屏幕(例如:具有多个字段的表单)不适合小型设备上的一个屏幕时,应使用滚动视图,因为这样的滚动视图为用户提供了向下滚动的可能性。

表示数据集时应使用ListView。

您可以在http://developer.android.com/guide/index.html 阅读有关这些内容的信息

【讨论】:

【参考方案5】:

ListView 由包含 DataSource 的 Adapter 支持。这使您可以轻松地按行显示数据。

一个 ScrollView 允许你在里面放内容,如果内容超过了 ScrollView 的大小,它就会允许用户滚动。

它们都有自己的用途,但这取决于您要做什么。

【讨论】:

【参考方案6】:

由于一张图片价值一千字,这里有完美的现实生活示例:

Listview 就像 Kijiji 应用程序

Scrollview 就像 EBay 应用程序

另外,查看像广告牌或墙壁这样的滚动视图,您可以在其中放置一堆不同的东西。

列表视图更像是一个结果页面:结果都具有相同的性质,因此它们非常适合列表视图。就像一个联系人列表:它们都共享相同的结构;电话号码姓名地址等……

【讨论】:

以上是关于ScrollView 和 ListView 的区别的主要内容,如果未能解决你的问题,请参考以下文章

使用LinearLayout实现ListView,解决ListView和ScrollView滚动冲突

listview 和 scrollview 一起使用 listview 测量高度不准确

android scrollview嵌套listview 页面有多余空白

浅谈android中的ListView合集系列之解决ScrollView和ListView嵌套冲突

ListView和ScrollView冲突

Android ListView 和 ScrollView 冲突问题