Можно ли расширить AbsListView, чтобы сделать новые реализации ListView? - PullRequest
50 голосов
/ 09 марта 2012

Я пытался создать стилистически другой вид списка, как и многие другие люди, и я начал с расширения AbsListView. Согласно документу Android, AbsListView:

Базовый класс, который можно использовать для реализации виртуализированных списков элементов. Список не имеет пространственного определения здесь. Например, в подклассах этого класса содержимое списка может отображаться в виде сетки, карусели, стека и т. Д.

После некоторых усилий и обзора реализации ListView, похоже, невозможно расширить AbsListView, как это делает ListView, из-за соединения двух классов и невозможности доступа к определенным элементам пакета. Я наткнулся на эту форму Romain Guy:

AbsListView и AbsSpinner предназначены для расширения в пределах фреймворк. Они также могут быть расширены в сторонних приложениях, но мы сделали не выставлять все необходимые защищенные поля и методы специально. Мы хотим быть очень осторожными в том, как мы предоставляем такие API, чтобы не получить вещи для будущих расширений и внутренних изменений. Наш текущий Рекомендация: просто скопируйте / вставьте нужный код в свой приложение.

Я начал пытаться сделать это, но копирование AbsListView становится кроличьей дырой в копировании множества других вещей, и это действительно кажется проигрышным предложением. Я хотел узнать, добился ли кто-нибудь успеха в расширении AbsListView, кто мог бы поделиться методологией.

[1] http://developer.android.com/reference/android/widget/AbsListView.html

[2] https://groups.google.com/forum/?fromgroups#!topic/android-developers/UhbR1tpVvF0

Ответы [ 2 ]

4 голосов
/ 13 сентября 2012

Должность около 2010 года, но его оценка по-прежнему верна сегодня.Некоторые необходимые методы и поля защищены, чтобы предотвратить будущие несовместимости, которые могут возникнуть в результате изменения внутренних компонентов AbsListView.

Лучшим решением по-прежнему является копирование кода для AbsListView в ваш проект вместе с необходимыми зависимостями (кроличья нора, о которой вы упомянули).

А пока, если вы захотите описать, какой тип View вы пытаетесь создать, мы можем указать вам направление, которое немного проще, чем создание собственногоAbsListView

2 голосов
/ 02 октября 2012

У меня был такой же опыт, когда я пытался создать подкласс ListView и AbsListView для создания 2D прокручиваемой электронной таблицы.В итоге у меня появился собственный подкласс ViewGroup, который обрабатывает макет, и подкласс TwoDScrollView для прокрутки.Сложнее всего - заставить флины работать правильно (т.е. создавать и размещать новые виды, прежде чем они перейдут в вид), и синхронизировать позиции видов между прокручиваемыми компонентами.Однако при наличии достаточного количества времени можно создать надежный компонент, который извлекает данные из курсора и прокручивает их достаточно плавно и быстро.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...