Можно ли сделать ListView
горизонтально? Я сделал это, используя вид галереи, но выбранный элемент автоматически попадает в центр экрана. Я не хочу, чтобы выбранный элемент находился в том же месте, где я щелкал. Как я могу исправить эту проблему? Моя идея заключалась в том, чтобы установить ListView
с горизонтальной прокруткой. Поделитесь своей идеей?
215
Ответы:
Согласно Android-документации,
RecyclerView
это новый способ упорядочить элементы в виде списка и отображать их горизонтально.Преимущества:
Больше информации о
RecyclerView
:Образец:
survivingwithandroid.com
Просто добавьте блок ниже, чтобы сделать
ListView
горизонтальный от вертикальногоКод-сниппет
источник
Пол не пытается исправлять ошибки в своей библиотеке или принимать исправления пользователей. Вот почему я предлагаю другую библиотеку, которая имеет похожую функциональность:
https://github.com/sephiroth74/HorizontalVariableListView
Обновление : 24 июля 2013 года автор (sephiroth74) выпустил полностью переписанную версию на основе кода Android 4.2.2 ListView. Я должен сказать, что он не имеет всех ошибок, которые были в предыдущей версии, и прекрасно работает!
источник
Ответ @Paul ссылается на отличное решение, но код не позволяет использовать onClickListeners для дочерних элементов (функции обратного вызова никогда не вызываются). Некоторое время я изо всех сил пытался найти решение, и я решил опубликовать здесь то, что вам нужно изменить в этом коде (на случай, если это кому-то понадобится).
Вместо переопределения
dispatchTouchEvent
переопределенияonTouchEvent
. Используйте тот же кодdispatchTouchEvent
и удалите метод (вы можете прочитать разницу между ними здесь http://developer.android.com/guide/topics/ui/ui-events.html#EventHandlers )Затем добавьте следующий код, который решит украсть событие у дочерних элементов и передать его нашим
onTouchEvent
, или позволить им обработать его.Наконец, не забудьте объявить переменные в вашем классе:
источник
Так как Google представил библиотеку поддержки Android v7 21.0.0, вы можете использовать RecyclerView для горизонтальной прокрутки элементов. Виджет RecyclerView - это более продвинутая и гибкая версия ListView.
Чтобы использовать RecyclerView, просто добавьте зависимость:
Вот образец:
Больше информации о RecyclerView:
источник
Это немного (очень) поздно, но я публикую это на тот случай, если кто-то придет позже.
В библиотеке поддержки на момент предварительного просмотра Android L есть
RecyclerView
именно то, что вы хотите.Прямо сейчас вы можете получить его только через L Preview SDK, и вам нужно установить его
minSdk
наL
. Но вы можете скопировать все необходимые файлы в ваш проект и использовать их таким образом, пока L официально не выйдет.Вы можете скачать предварительный просмотр документов здесь .
Предупреждение: API для Recycler View может измениться, и в нем могут быть ошибки.
обновленный
Исходный код для горизонтального просмотра списка:
источник
LinearLayoutManager
- см. Здесь: stackoverflow.com/questions/28460300/…Загрузите файл jar отсюда
Теперь поместите его в папку libs, щелкните правой кнопкой мыши и выберите «Добавить как библиотеку».
сейчас в main.xml поставь этот код
Теперь в классе Activity, если вы хотите горизонтальный просмотр списка с изображениями, поместите этот код
источник
Это на самом деле очень просто : просто поверните список, чтобы положить его на бок
mlistView.setRotation(-90);
Затем, после раздувания детей, это должно быть внутри метода getView. Вы вращаете детей, чтобы встать прямо:
Редактировать: если ваш ListView не помещается должным образом после вращения, поместите ListView внутри этого RotateLayout следующим образом:
источник
Мое решение состоит в том, чтобы просто использовать
ViewPager
виджет. Он неGallery
имеет централизованного управления и имеет встроенные функции для просмотра видов (какListView
). Подобный подход вы можете увидеть в приложении Google Play, когда имеете дело с горизонтально прокручиваемыми списками.Вам просто нужно расширить
PagerAdapter
и выполнить пару настроек:В результате у вас будет горизонтально прокручиваемый виджет с адаптером, например так:
источник
Примечание. Android теперь поддерживает горизонтальные представления списка с использованием RecyclerView, поэтому теперь этот ответ не рекомендуется для получения информации о RecyclerView: https://developer.android.com/reference/android/support/v7/widget/RecyclerView
Я разработал логику, чтобы сделать это без использования какой-либо внешней библиотеки горизонтальной прокрутки, вот горизонтальное представление, которого я достиг, и я разместил свой ответ здесь: https://stackoverflow.com/a/33301582/5479863
Мой JSON ответ таков:
Файл макета:
файл класса:
уловка, которая работает здесь, является идентификатором, который я назначил для ImageView "imgView.setId (v)", и после этого применяя onClickListener к этому, я снова выбираю идентификатор представления .... Я также прокомментировал внутри кода так что это легко понять, я надеюсь, что это может быть очень полезно ... Happy Coding ... :)
источник
getPixelsToDP()
?Это не очень хороший ответ, но как насчет использования горизонтальной прокрутки ?
источник
Вы можете использовать RecyclerView в библиотеке поддержки. RecyclerView - это обобщенная версия ListView, которая поддерживает:
Android Recycler Просмотр документов
источник
Я много искал решение этой проблемы. Короткий ответ: нет хорошего решения без переопределения частных методов и тому подобного. Лучшее, что я нашел, - это реализовать его с нуля, расширив его
AdapterView
. Это довольно жалко. Смотрите мой так вопрос о горизонтальных ListViews .источник
fillListDown()
, что в методе необходимо отслеживать нижний край последнего элемента списка. Но вы не знаете, где находится этот край, пока не создадите последний элемент (adapter.getCount () - 1). Таким образом, вы ждете, пока этот элемент будет создан, а затем вы можете сохранить местоположение края. Как только вы это узнаете, вы можете убедиться, что mListTop никогда не меньше 0 и никогда не больше высоты списка.Я должен был сделать то же самое для одного из моих проектов, и в итоге я написал свой собственный. Я назвал это HorzListView теперь является частью моей библиотеки Aniqroid с открытым исходным кодом .
http://aniqroid.sileria.com/doc/api/ (найдите загрузки внизу или воспользуйтесь проектом кода Google, чтобы просмотреть другие варианты загрузки: http://code.google.com/p/aniqroid/downloads/list )
Документация по классам находится здесь: http://aniqroid.sileria.com/doc/api/com/sileria/android/view/HorzListView.html
источник
Для моего приложения я использую HorizontalScrollView, содержащий LinearLayout внутри, у которого ориентация установлена на горизонтальную. Чтобы добавить изображения внутрь, я создаю ImageViews внутри упражнения и добавляю их в свой LinearLayout. Например:
Это прекрасно работает для меня. В упражнении все, что мне нужно сделать, это что-то вроде кода ниже:
Как я уже сказал, это работает для меня, и я надеюсь, что это поможет кому-то, кто хочет достичь этого.
источник
ну, вы всегда можете динамически создавать свои текстовые представления и т. д. и настраивать свои onclicklisteners, как вы сделали бы с адаптером
источник
HorizontialListView не может работать, когда данные в адаптере включены в другой поток. В потоке пользовательского интерфейса все работает на 100%. Это большая проблема в многопоточности. Я думаю, что использование HorizontialListView - не лучшее решение для вашей проблемы. HorzListView - лучший способ. Просто замените свою предыдущую галерею на HorzListView. Вам не нужно изменять код адаптера. Тогда все идет так, как вы надеетесь. См. Https : // stackoverflow.com/a/12339708/1525777 о HorzListView.
источник
Я использовал горизонтальную ссылку на просмотр списка в своем проекте и получил хорошие результаты. Первоначально я использовал библиотеку devsmart, но это вызвало у меня некоторые проблемы. Так что лучший способ использовать горизонтальную ссылку в виде списка, так как она исправила мои проблемы, а также недавно я запустил свое приложение в Google PlayStore, используя эту библиотеку, и получил хороший отклик от пользователей. Поэтому я рекомендую вам использовать ту же библиотеку, о которой я упоминал выше, для горизонтального отображения списка. Наслаждаться :)
источник
Для этого есть отличная библиотека, которая называется TwoWayView , и ее очень легко реализовать, просто включите библиотеку проекта в свое рабочее пространство и добавьте ее как проект библиотеки в исходный проект, а затем выполните следующие шаги, которые изначально упоминались здесь :
Затем,
и, наконец, просто объявите об этом и разберитесь с ним как с любым обычным
ListView
:Все методы
ListView
будут работать здесь как обычно, но я заметил только одно отличие: при настройке режима выбора методsetChoiceMode
принимает неint
значение, а значение изenum
вызванногоChoiceMode
, чтоlist_view.setChoiceMode(ListView.CHOICE_MODE_SINGLE);
и будетlvTest.setChoiceMode(ChoiceMode.SINGLE); // or MULTIPLE or NONE
.источник
Вы можете использовать ViewFlipper для включения макета XML и добавления изображений, списка для каждого макета XML
источник