Android listview без прокрутки

Полный список

— рассматриваем события 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 для обсуждения проблем производительности и для ваших пожеланий по содержанию курса по этой теме

Источник

Как получить ListView без прокрутки?

Мне нужен ListView без прокрутки и показывать весь ListView. Это потому, что весь мой экран — это ScrollView, и я отправляю виджеты с RelativeLayout, поэтому мне не нужна прокрутка ListView.

Я установил свой пользовательский интерфейс с помощью кода, а не с помощью xml.

Я использовал listView.setScrollContainer(false) , но это не работает, я не понимаю почему.

7 ответов

Не помещайте список в режим прокрутки, это не сработает. Если вам нужен список элементов, который не прокручивается, это называется linearlayout.

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

Вызовите эту функцию, передав свой объект ListView:

Показанная выше функция является модификацией сообщения в: Отключить прокрутку в списке

Обратите внимание на то, чтобы вызывать эту функцию после того, как вы настроили адаптер для просмотра списка. Если размер записей в адаптере изменился, вам также необходимо вызвать эту функцию.

Просто назначьте этого слушателя своему ListView :

В зависимости от того, что именно вы пытаетесь сделать, вы можете решить свою проблему, отказавшись от ScrollView и вместо этого используя ListView . /reference/android/widget/ListView.html#addHeaderView%28android.view.View%29 «rel =» noreferrer «> addHeaderView(View) и addFooterView(View) .

Я придумал BaseAdapterUnscrollable. По сути, он просто добавляет представления в контейнер ViewGroup. Реализация немного похожа на BaseAdapter. Это очень удобно, если вы используете в своем проекте несколько таких списков без прокрутки.

В onCreate:

Ваш конкретный адаптер:

BaseAdapterNonScrollable (просто скопируйте):

Чтобы отключить прокрутку, вы можете использовать listview.setEnabled(false)

Это также отключает выбор строк.

Я добился этого, передав свойство физики в ListView:

Примечание. Этот ListView находится внутри столбца с другими виджетами, а столбец заключен в SingleChildScrollView.

Источник

android listview отображение всех доступных элементов без прокрутки со статическим заголовком

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

он использует только небольшую часть экрана (около 2 строк на список), а не заполняет доступную высоту,и сами списки можно прокручивать. Как я могу изменить макет, чтобы всегда показывать целые списки, но иметь экран scrollalbe?

Читайте также:  Не ищет гугл андроид

12 ответов

В android, как мне получить положение прокрутки listview? Я знаю, что могу получить положение прокрутки однородного заполненного listview со следующим кодом: int scrollY = -this.getChildAt(0).getTop() + this.getFirstVisiblePosition()* this.getChildAt(0).getHeight(); код предполагает, что все.

У меня есть RelativeLayout с разными элементами. Я планировал иметь на нем два ListViews, но заметил, что есть некоторые проблемы с прокруткой. Поскольку каждый ListView показывает только максимум 5 строк, должен ли я попытаться сделать какой-то пользовательский адаптер для объединения этих.

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

Как отметил @Alex в принятом ответе, LinearLayout вряд ли является заменой. У меня была проблема, когда LinearLayout не был вариантом, вот когда я наткнулся на этот блог . Я помещу код здесь для справочных целей. Надеюсь, это поможет кому-то там!

Вы можете создать свой собственный пользовательский список. (Он может расширить ListView/ExpandableListView/GridView) и переопределить метод onMeasure с помощью этого. С этим вам никогда не понадобится вызывать функцию или что-то еще. Просто используйте его в своем xml.

Отображение элемента listview, содержащего кнопку в нем, как наложение поверх других элементов listview при нажатии в android

Я хочу установить listview, чтобы показать все элементы без прокрутки. Ниже приведен мой макет:

У меня был ListView в моем макете, и я хотел использовать библиотеку, которая не может обрабатывать ListView здесь, потому что она оборачивает его в ScrollView . Лучшее решение для меня основано на ответе Федора.

Так как я уже получил ArrayAdapter для ListView , я хотел использовать его повторно:

Для меня это прекрасно работает, потому что мне просто нужно отображать динамические данные, варьирующиеся от 1 до 5 элементов. Мне просто нужно было добавить свой собственный разделитель.

Если у кого-то все еще есть проблема, вы можете сделать customList и добавить метод onMesure() так же, как я его реализовал:

Использование android:layout_height и android:layout_weight решило эту проблему для меня:

Я просто сделал это, установив параметры ListView

Я предположил, что никто не видит this.U не может иметь два свитка на одном макете. 1-й у вас есть scrollview, а затем у вас есть список, держу пари, что вы убиваете там android хороших практик.

Если все элементы имеют одинаковую высоту

Если вы хотите простое решение этой проблемы без расширения класса ListView, это решение для вас.

У меня нет статического заголовка, но, используя сообщение HussoM в качестве подсказки, вот что мне удалось сделать. В моем сценарии высота элементов в списке была неравномерной из-за переменных текстовых предложений в каждом из элементов, и я использую wrap_content для высоты и match_parent для ширины.

Установите android:layout_height=»fill_parent» в свой LinearLayout

Похожие вопросы:

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

У меня есть listview с полосой прокрутки. Я хочу, чтобы полоса прокрутки располагалась поверх элементов списка с правой стороны, но имела небольшое поле справа. Таким образом, полоса прокрутки имеет.

[Qt быстро 2.0 (qml) — Android] Я искал, но не понимаю, как можно увеличить скорость прокрутки в listview: ListView < width: 180; height: 200 Component < id: contactsDelegate Rectangle < id: wrapper.

В android, как мне получить положение прокрутки listview? Я знаю, что могу получить положение прокрутки однородного заполненного listview со следующим кодом: int scrollY =.

Читайте также:  Intune microsoft для android

У меня есть RelativeLayout с разными элементами. Я планировал иметь на нем два ListViews, но заметил, что есть некоторые проблемы с прокруткой. Поскольку каждый ListView показывает только максимум 5.

Отображение элемента listview, содержащего кнопку в нем, как наложение поверх других элементов listview при нажатии в android

Я хочу установить listview, чтобы показать все элементы без прокрутки. Ниже приведен мой макет:

Android Listview код для включения быстрой прокрутки в исходном коде фреймворка android

В android setFastScrollEnabled(true); используется для создания ListView быстрой прокрутки. Эта быстрая прокрутка не работает, когда в ListView меньше элементов . Я где-то читал, что быстрая.

Я пытаюсь использовать ListView с простым заголовком, который остается в верхней части списка. Он отлично работает в большинстве ситуаций. Когда я прокручиваю весь путь до самого верха вручную.

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

Источник

Убрать скролл в 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 из БД. .

Источник

Оцените статью