【问题标题】:How many items a ListView can store?ListView 可以存储多少项?
【发布时间】:2011-02-09 11:17:07
【问题描述】:

我是 Android 编程新手。我想知道 ListView 可以存储多少项目?我在文档中搜索,但他们不谈论这个。如果我在 ListAdapter 中放入很多(可能是 10k)项,会影响性能吗?

干杯, MK。

【问题讨论】:

  • 我建议你必须阅读这篇文章 article

标签: android listview listadapter


【解决方案1】:

ListView 在 Android 中是虚拟化的。实际上,这意味着其中的元素数量没有实际限制。您可以将数百万行放入列表中,它只会为当前可见的行(或更多的顶部)分配内存。

查看有关为 AdapterView 编写自定义适配器类的数十个教程(ListView 扩展了该类)。还可以查看关于 ListViews 的 Google I/O 2010 会议;真的很有用:here

【讨论】:

  • 我们将这 10k 项保存在列表适配器的数组列表中。是否会导致内存问题?
  • 这完全取决于这些项目中的每一项消耗多少内存以及您所针对的设备拥有多少堆空间。话虽如此,您可能需要一些具有这种数量级的项目计数的窗口机制。
【解决方案2】:

没有限制,因为 ListView 仅在项目进入视图时呈现项目,因此在呈现项目时只关心 ListView 的数据(尽管它需要知道项目的数量才能正确呈现滚动条)

Google IO 视频非常适合学习 ListView http://www.youtube.com/watch?v=wDBM6wVEO70

也就是说,我会问您是否应该加载那么多,因为显然用户无法查看所有内容,并且在 ListView 中滚动包含那么多项目将非常乏味。如果是我,我会问一些问题:

  • 列表最初是否需要全部显示?它可以只显示最相关的集合吗?最近的/最大的/最小的/最好的/等
  • 您可以在项目页面中加载块而不是一次加载它们吗?因此,例如,您最初加载 10-100,当用户到达底部时显示“正在加载更多...”并带有进度旋转图标,并拉入更多,然后用户可以选择加载多少,以及加载多少他们准备做的滚动
  • 您是否应该构建一个 UI 来过滤项目,这样就不需要查看 10,000 个项目?

更多关于 ListView http://www.softwarepassion.com/android-series-custom-listview-items-and-adapters/ http://developer.android.com/guide/topics/ui/binding.html http://www.androidguys.com/2008/07/14/fancy-listviews-part-one/

【讨论】:

    【解决方案3】:

    Integer.MAX_VALUE,因为它的大部分功能都依赖于int position

    【讨论】:

      【解决方案4】:

      我创建了一个 ListView 并使用 Integer.MAX_VALUE 作为返回给适配器的列表中项目数的数字。这对 ListView 的性能没有影响,尽管它拥有大约 20 亿个项目。

      我认为 10k 可以工作:P

      在此处查看我的答案以详细了解我的意思:How to create a closed (circular) ListView?

      【讨论】:

        【解决方案5】:

        您有内存限制(特定于设备)。只要您不耗尽内存限制,您就可以存储任意数量的项目。您可以使用 ADT 工具随时监控应用程序使用的内存量。

        【讨论】:

          猜你喜欢
          • 2019-11-26
          • 1970-01-01
          • 1970-01-01
          • 2021-10-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-05-10
          • 2014-09-20
          相关资源
          最近更新 更多