Подтвердить что ты не робот

Сколько элементов ListView может хранить?

Я новичок в программировании на Android. Интересно, сколько вещей ListView может хранить? Я ищу в документах, но они не говорят об этом. Что делать, если я добавлю много (возможно 10k) элементов в ListAdapter, повлияет ли это на производительность?

Cheers, MK.

4b9b3361

Ответ 1

ListView виртуализирован в Android. Практически это означает, что нет фактического предела для количества элементов внутри него. Вы можете поместить миллионы строк в список, и он будет выделять только память для видимых в данный момент (или несколько других вершин).

Ознакомьтесь с десятками руководств по написанию пользовательского класса Adapter для AdapterView (ListView расширяет его). Также проверьте сеанс Google I/O 2010 в ListViews; это действительно полезно: здесь

Ответ 2

Нет ограничений, поскольку ListView только отображает элементы, когда они появляются, и поэтому заботится только о данных для ListView, когда дело касается рендеринга элемента (хотя ему нужно знать количество элементов для правильной визуализации полосы прокрутки )

Видео Google IO действительно отлично подходит для изучения ListView http://www.youtube.com/watch?v=wDBM6wVEO70

Тем не менее, я бы спросил, стоит ли вам загружать много, так как ясно, что пользователь не может смотреть на них всех и прокручивать ListView с тем, что многие элементы будут очень утомительными. Если бы это был я, я задавал бы несколько вопросов:

  • Должен ли список сначала отображать их ВСЕ? Может ли это показать самый подходящий набор? Ближайшие/самые большие/самые маленькие/самые лучшие /etc
  • Вместо того, чтобы загружать их все сразу, можете ли вы загружать блоки на страницах предметов? Так, например, вы сначала загружаете 10-100, а когда пользователь добирается до нижней части экрана "Loading more..." с пиктограммой прогресса, и больше тянет, тогда пользователь может выбрать, сколько загрузить и сколько прокрутки, которые они готовы сделать
  • Если вы создаете пользовательский интерфейс для фильтрации элементов, поэтому им не нужно смотреть на 10000?

Подробнее о 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

Я создал ListView и использовал Integer.MAX_VALUE как число, возвращаемое адаптеру для количества элементов в списке. Это не повлияло на производительность ListView, хотя в нем было около 2 миллиардов элементов.

Думаю, 10k будет работать: P

Посмотрите мой ответ здесь, чтобы увидеть, что я имею в виду: Как создать закрытый (круговой) ListView?

Ответ 4

Integer.MAX_VALUE, так как большинство его функций будут разбиваться, поскольку они полагаются на int position.

Ответ 5

У вас есть предел памяти (который специфичен для устройства). Если вы не исчерпали свой лимит памяти, вы можете хранить как можно больше предметов. Существуют инструменты ADT, которые вы можете использовать для мониторинга того, сколько памяти используется вашим приложением в любой момент.