Полный список
— рассматриваем события ListView: нажатие — onItemClick, выделение — onItemSelect, прокрутка — onScroll
При взаимодействии со списком может возникнуть необходимость обрабатывать события – нажатие на пункт и прокрутка. Попробуем это сделать.
Создадим проект:
Project name: P0441_SimpleListEvents
Build Target: Android 2.3.3
Application name: SimpleListEvents
Package name: ru.startandroid.develop.p0441simplelistevents
Create Activity: MainActivity
Нарисуем экран main.xml:
На экране только ListView.
Так же, как и на прошлом уроке добавим список имен в ресурс res/values/strings.xml:
Пишем код MainActivity.java:
Смотрим код. Мы находим экранные элементы, создаем и присваиваем списку адаптер. Далее списку мы присваиваем два обработчика событий:
1) OnItemClickListener – обрабатывает нажатие на пункт списка
parent – View-родитель для нажатого пункта, в нашем случае — ListView
view – это нажатый пункт, в нашем случае – TextView из android.R.layout.simple_list_item_1
position – порядковый номер пункта в списке
id – идентификатор элемента,
Мы в лог будем выводить id и position для элемента, на который нажали.
2) OnItemSelectedListener – обрабатывает выделение пунктов списка (не check, как на прошлом уроке)
Предоставляет нам метод , android.view.View, int, long)» target=»_blank»>onItemSelected полностью аналогичен по параметрам методу onItemClick описанному выше. Не буду повторяться.
Также есть метод )» target=»_blank»>onNothingSelected – когда список теряет выделение пункта и ни один пункт не выделен.
Все сохраним и запустим приложение.
Ткнем какой-нибудь элемент, например — Петр. Смотрим лог:
itemClick: position = 2, >
Все верно. Т.к. позиция считается не с единицы, а с нуля – Петр имеет позицию 2. (В нашем случае id равен position. Я пока не встречал случаев id != position, но наверняка они есть)
Теперь покрутите колесо мышки или понажимайте клавиши вверх вниз на клавиатуре. Видно что идет визуальное выделение элементов списка.
А в логах мы видим такие записи:
itemSelect: position = 2, > itemSelect: position = 3, > itemSelect: position = 4, > itemSelect: position = 5, > itemSelect: position = 4, > itemSelect: position = 3, > itemSelect: position = 2, >
Т.е. обработчик фиксирует какой пункт выделен. Честно говоря, я не очень понимаю как можно использовать такое выделение. Но обработчик для него есть и я решил про него рассказать. Пусть будет.
Снова нажмем теперь на любой пункт списка, мы видим, что выделение пропало. Логи:
itemSelect: nothing
itemClick: position = 3, >
Ничего не выделено и нажат пункт с позицией 3.
Давайте добавим к списку еще один обработчик:
OnScrollListener – обрабатывает прокрутку списка.
view – это прокручиваемый элемент, т.е. ListView
scrollState – состояние списка. Может принимать три значения:
SCROLL_STATE_IDLE = 0, список закончил прокрутку
SCROLL_STATE_TOUCH_SCROLL = 1, список начал прокрутку
SCROLL_STATE_FLING = 2, список «катнули», т.е. при прокрутке отпустили палец и прокрутка дальше идет «по инерции»
Вывод в лог я пока закаментил, чтобы не мешалось. Чуть позже раскаментим.
view – прокручиваемый элемент
firstVisibleItem – первый видимый на экране пункт списка
visibleItemCount – сколько пунктов видно на экране
totalItemCount – сколько всего пунктов в списке
Причем для параметров firstVisibleItem и visibleItemCount пункт считается видимым на экране даже если он виден не полностью.
Все сохраним и запустим.
Теперь потаскайте список туда-сюда курсором (как будто пальцем) и смотрите логи. Там слишком много всего выводится. Я не буду здесь выкладывать. Но принцип понятен – меняется первый видимый пункт (firstVisibleItem) и может на единицу меняться кол-во видимых пунктов (visibleItemCount).
Теперь закоментируем вывод в лог в методе onScroll (чтобы не спамил нам лог) и раскаментим в onScrollStateChanged.
Схватим список, немного потягаем туда сюда и отпустим. Смотрим лог:
scrollState = 1
scrollState = 0
Отработали два события – список начал прокрутку, список закончил прокрутку.
Попробуем взять список, «катнуть» его и отпустить.
scrollState = 1
scrollState = 2
scrollState = 0
Видим три события – прокрутка началась, список «катнули», прокрутка закончилась.
Полный код урока:
На следующем уроке:
— строим список-дерево ExpandableListView
Присоединяйтесь к нам в Telegram:
— в канале StartAndroid публикуются ссылки на новые статьи с сайта startandroid.ru и интересные материалы с хабра, medium.com и т.п.
— в чатах решаем возникающие вопросы и проблемы по различным темам: Android, Kotlin, RxJava, Dagger, Тестирование
— ну и если просто хочется поговорить с коллегами по разработке, то есть чат Флудильня
— новый чат Performance для обсуждения проблем производительности и для ваших пожеланий по содержанию курса по этой теме
Источник
Scroll listview
Когда загружаю мало данных (около 10 строк) в список, все отображается корректно, видно заголовок, список и кнопку. Если загрузить больше 10 строк, экран выглядит следующим образом: заголовок, список до конца экрана, список скроллится, но кнопки нет. При скролле, TextView остается на месте, скроллится только ListView.
Что не так в моей разметке? Надо чтобы скроллилось все, а не только ListView.
Scroll Listview
Подскажите как убрать скролл в компоненте Listview
Android Listview Scroll
Здравствуйте, я написал код ведьма может загрузить JSON и шоу ListView (он работает идеально), но.
ListView. После добавления кнопки перестал быть доступен сам ListView
Кастомизировал ListView с помощью нескольких TextView. Но после того, как добавил ImageButton сам.
Listview вывод данных и переход по нажатию на другой Listview SQLite
Доброго извините за название темы, долго не мог сформировать название, В общем у меня беда с.
dajver, ага. Вот как оказывается. Либо вес назначить, либо поменять тип слоя и отметить у ListView привязку к контролу. Спасибо.
Добавлено через 15 минут
dajver, немного не то, что хотелось бы. Получается кнопка располагается всегда в самом низу экрана, а нужно чтобы кнопка была сразу под списком. Если список длинный, то кнопку сначала и не видно, но когда пролистаешь список в конец сразу после него будет кнопка.
Источник
Убрать скролл в ListView
Одновременный скролл нескольких ListView
Здравствуйте! Меня интересует вопрос по Android Studio, можно ли как-нибудь организовать.
Как убрать прокрутку ListView
Здравствуйте! Как можно сделать так, чтобы скроллился не ListView, а Layout, в котором этот.
Убрать выделение строк в Listview
Всем привет! Подскажите кто знает как можно убрать выделение строк в listview?
Убрать все виды выделений с item в ListView
Использую android:cacheColorHint=»@android:color/transparent», но не помогает. Как можно убрать все.
Про разделители не понял, но думаю, это не то. Представьте, что у меня не ListView, а просто вертикальный LinearLayout. Вот примерно такой результат мне и нужен — просто список без прокрутки. Подумываю уже действительно обойтись без ListView и сделать список на Layout’е
Добавлено через 7 минут
На словах думаю будет долго объяснять, так что выложу весь проект https://yadi.sk/d/OzBLMnPMuNgt2
Когда запустите, перейдите на вкладку «Имущество», нажмите «+» у «Домов», подобавляйте в список, и посмотрите, как список выглядит и прокручивается. (Другие вкладки и списки пока не работают)
vxg, Именно этот адаптер «три в одном» я сейчас и делаю на основе вашего кода. Но каждый из трёх разделов списка нужно как-то скрывать. Для каждого списка я создал булевские переменные на скрывание списков, и в методе getView собирался возвращать пустой View для элементов списков, помеченных для скрывания.
Сначала немного затупил, но пока писал сообщение понял примерно, что нужно сделать. Я правильно понял, что при notifyDataSetChanged вызывается getCount адаптера, и полученное число раз вызывается getView? Тогда возвращать сумму в getCount и вычислять индексы в getView нужно без учёта длин скрытых списков?
ListView. После добавления кнопки перестал быть доступен сам ListView
Кастомизировал ListView с помощью нескольких TextView. Но после того, как добавил ImageButton сам.
Listview вывод данных и переход по нажатию на другой Listview SQLite
Доброго извините за название темы, долго не мог сформировать название, В общем у меня беда с.
Передача данных из ListView в другой Activity в ListView
Добрый день. Пытаюсь разобраться с передачей данных с ListView, но выходит что то непонятное.
Данные из SQlite в ListView, обработка события ListView
Ребят, есть БД, ListView. Надо при нажатии на строчку ListView вытащить данные int из БД. .
Источник
ScrollView и HorizontalScrollView
При большом количестве информации, которую нужно поместить на экране приходится использовать полосы прокрутки. В Android существуют специальные компоненты ScrollView и HorizontalScrollView, которые являются контейнерными элементами и наследуются от ViewGroup. Обратите внимание, что класс TextView использует свою собственную прокрутку и не нуждается в добавлении отдельных полос прокрутки. Но использование отдельных полос даже с TextView может улучшить вид вашего приложения и повышает удобство работы для пользователя.
На панели инструментов компоненты можно найти в разделе Containers.
В контейнеры ScrollView и HorizontalScrollView можно размещать только один дочерний элемент (обычно LinearLayout), который в свою очередь может быть контейнером для других элементов. Виджет ScrollView, несмотря на свое название, поддерживает только вертикальную прокрутку, поэтому для создания вертикальной и горизонтальной прокрутки необходимо использовать ScrollView в сочетании с HorizontalScrollView. Обычно ScrollView используют в качестве корневого элемента, а HorizontalScrollView в качестве дочернего. Можно и наоборот, пробуйте.
В в теле метода onCreate() создайте ссылку на элемент TextView, объявленный в XML-разметке, и запишите в него через метод setText() какой-нибуль длинный текст, который не поместится в видимые размеры экрана устройства:
Запустив проект, вы должны увидеть вертикальную и горизонтальную полосы прокрутки при попытке скролирования.
Если полосы прокрутки вас раздражают, то используйте атрибут android:scrollbars=»none», который скроет их.
По такому же принципу можете вложить ImageView, чтобы просматривать большие картинки:
Методы scrollBy() и scrollTo()
Вы можете программно прокручивать контент с помощью методов scrollBy() и scrollTo(). Например, можно организовать автоматическую прокрутку во время чтения. В нашем примере мы будем прокручивать контент с помощью трёх кнопок.
Сам код для методов:
Дополнительное чтение
Библиотека ParallaxScrollView с использованием эффекта параллакса. Вы прокручиваете длинный текст, а задний фон прокручивается чуть медленнее. Возможно, кому-то пригодится. Там же можно скачать готовое демо и просмотреть в действии.
Источник
Scroll listview
Когда загружаю мало данных (около 10 строк) в список, все отображается корректно, видно заголовок, список и кнопку. Если загрузить больше 10 строк, экран выглядит следующим образом: заголовок, список до конца экрана, список скроллится, но кнопки нет. При скролле, TextView остается на месте, скроллится только ListView.
Что не так в моей разметке? Надо чтобы скроллилось все, а не только ListView.
Scroll Listview
Подскажите как убрать скролл в компоненте Listview
Android Listview Scroll
Здравствуйте, я написал код ведьма может загрузить JSON и шоу ListView (он работает идеально), но.
ListView. После добавления кнопки перестал быть доступен сам ListView
Кастомизировал ListView с помощью нескольких TextView. Но после того, как добавил ImageButton сам.
Listview вывод данных и переход по нажатию на другой Listview SQLite
Доброго извините за название темы, долго не мог сформировать название, В общем у меня беда с.
dajver, ага. Вот как оказывается. Либо вес назначить, либо поменять тип слоя и отметить у ListView привязку к контролу. Спасибо.
Добавлено через 15 минут
dajver, немного не то, что хотелось бы. Получается кнопка располагается всегда в самом низу экрана, а нужно чтобы кнопка была сразу под списком. Если список длинный, то кнопку сначала и не видно, но когда пролистаешь список в конец сразу после него будет кнопка.
Источник