Andriod — помогите не отображается ListView


Содержание

Andriod — помогите не отображается ListView

64 просмотра

2 ответа

25 Репутация автора

Моя проблема в том, что мой список просто отображает прямоугольники без видимых опций, но когда я щелкаю по любому элементу, он отображает текст списка. Ниже мой xml-файл:

ниже мой файл Java:

Ответы (2)

1 плюс

532 Репутация автора

Разница в том, что у simple_list_item_1 него есть одно текстовое представление, в то время как у simple_list_item_2 него есть два текстовых представления внутри подкласса RelativeLayout .

Также arrayadapter не заполняет несколько экземпляров textview. Вы должны переопределить getView() для этого.

Примечание: — Так как listView это уже match_parent как ширина и высота, не должно быть никакой необходимости для выравнивания с нижней или в конце или вправо.

Попробуйте без указания идентификатора ресурса textview, например: —

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

Но в вашем случае это вам не нужно, поэтому попробуйте использовать без него.

Надеюсь это поможет.

Автор: Kaveri Размещён: 02.09.2020 07:04

плюса

113 Репутация автора


По вашему изображению тексты очень бледные. Когда вы щелкаете по одному из них, фон элемента становится темным и появляется белый текст. С другой стороны, если вы хотите элементы с одним textview, вы должны использовать ArrayAdapter , в противном случае вы должны расширить ArrayAdapter класс. Вот пример:

Andro >

Ни одно приложение, запрашивающее набор данных и возвращающее результаты, не обходится без отображения списка. Возьмем мессенджер или контактную книгу, в них контакты отображаются в виде списка. В Android такие прокручиваемые списки создаются и оформляются виджетом ListView. Работать с listview в андроидстудио удобней всего. Что такое androidstudio, вы можете узнать, перейдя по ссылке.

ListView: что это

Android ListView – способ представления элементов, в котором результаты отображаются в виде списка с вертикальной прокруткой. Функционирует androidstudiolist по следующему принципу – адаптер извлекает из источника содержимое и автоматически вставляет в androidstudio список.

Источником данных выступают базы данных и массивы. Можно создать следующие андроидстудио виды списков: с собственной разметкой, динамически заполняющиеся, androidstudiolistview многоуровневый, с элементами прослушивания событий и т.д.

ListView на примере телефонной книги

Адаптеры – заполнение списка данными

В аndroidstudiolistview оформление списка и его заполнение происходит благодаря «адаптерам». Основное их задание — связь информации с перечнем. В ОС Андроид работать с ListView можно с помощью адаптеров: первый –ArrayAdapter, второй – CursorAdapter. Второй управляет данными из базы данных. ArrayAdapter регулирует содержимое перечней и массивов.

Адаптеры действуют в качестве посредников между источником информации и ListView

За создание индивидуального адаптера отвечает абстрактный класс BaseAdapter. Индивидуальные адаптеры могут понадобиться, когда требуется организовать недостающий контроль над представлениями или управление сведениями. Также в индивидуальном адаптере предусматривают компоненты, отвечающие за кэширование, повышающие производительность функционала.

В качестве основных приемов адаптера выступают getCount() и getView(). С помощью первого метода можно узнать, сколько объектов будет выводиться. Второй метод отвечает за создание элементов списка. Вызывается getView() для каждого элемента, определяя, что отображать нужно, а что нет. Повторное использование существующих элементов можно выставить с помощью параметра convertView, который содержится в getView().

Пользовательская разметка

Для придания оригинальности списку нужно системную разметку заменить на пользовательскую, но для этого ее необходимо создать и подключить. Перейдите в категорию res/layout/ и создайте в категории файл под названием list_item.xml. Listviewandroidstudio пример с собственной разметкой:

Выставление цвета, отступа, размера шрифта и т.д.

Когда необходимо добиться изменения в andro . В TextView возможна настройка практически всех параметров. Единственным исключением является характеристика Text, так как ее указывают в виде компонента ListView автоматически. Для подключения своей разметки останется изменить одну строчку в коде, вместо системной разметки поставить свою.

Подключение собственной разметки

Динамическое заполнение списка

Чтобы заполнить список, пользователю следует внести в пустой список новые компоненты. К примеру, расположим на экране поле, в которое в дальнейшем пользователь будет вводить известные ему города, набирая текст с клавиатуры. При нажатии кнопки Enter введенное название города сразу фиксируется в динамическом списке. За моментальное обновление списка отвечает адаптер, а за хранение данных – массив.


Пример кода заполнения пользователем списка городов

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

Реализация кода заполнения пользователем списка городов

Прослушивание событий элемента ListView

Компонент ListView генерирует множество событий, на некоторые из них необходимо реагировать, в частности, это события, возникающие после клика на объекте из списка. Обеспечивают эти цели такие методы: OnItemClick и setOnItemClickListener.

Цукерберг рекомендует:  Ruby - Курс по Ruby

Все данные, необходимые, чтобы определить компонент, нажатый в перечне, передаются именно в метод onItemClick() . В примере ниже реализовано всплывающее сообщение с текстовой информацией, которое возникает после нажатия на любой раздел из перечня.

Код события: нажатие на элемент списка

Программное нажатие на элемент списка

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

Пример кода для щелчка

ListView не реагирует на щелчки

Бывают такие случаи, когда после щелчка на категориях меню ничего не происходит, даже несмотря на то, что в коде все необходимые методы стоят, и визуально ошибок не видно. Что предпринять?

Первое – проверить, нет ли в компоненте перечня CheckBox. Если содержит, то глюк заключается в нем, ведь у него имеется индивидуальный слушатель щелчков. Исправить такую ситуацию довольно легко, необходимо избавиться от фокуса.

Также иногда помогает перемещение метода OnItemClickListener. Только делать это нужно перед тем, как устанавливается адаптер.

Второе – если в компоненте перечня содержится TextView и используется параметр andro , его меняют на android:minLines/android:maxLines. Не помешает проверить наличие характеристики android:autoLink, если таков есть, то его следует удалить.

Если проблемы остались, значит, причина в ImageButton. Установите фокус в false.

Заставляем ListView реагировать на нажатия

Настраиваем внешний вид ListView

Чтобы список выглядел более привлекательно, необходимо воспользоваться встроенными атрибутами. Для задания высоты разделителя используется атрибут dividerHeight. Для задания самого графического разделителя используется атрибут divider.


В качестве разделителя можно установить не только цвет, но и картинку. Загружать следует картинки формата png и фиксировать файл в качестве drawable-ресурса. Таким образом можно избежать множества ошибок.

Пример настройки внешнего вида списка

Подсветка нажатий

Для начала необходимо создать в папке Resources > drawable файл ViewCellBackground.xml, который будет определять фигуры с цветами для состояния по умолчанию, а также состояния «нажатого» элемента. В файл вписываем строчку:

После для этого класса реализуем пользовательский рендерер, для этого устанавливаем фоновый ресурс:

Если для существующего UIView не работает установка фонового цвета, то можно попробовать после установки цвета фона вызвать SetNeedsLayout.

Результат выполнения кода

Пользовательский селектор

Автоматический элемент перечня при выборе выделен цветом. Выделение можно сделать более оригинальным. Воспользуйтесь параметром android:listSelector. Все что необходимо сделать, это подобрать подходящую селектору текстуру и привязать ее через ресурс.

Для подсвечивания элемента списка сразу после запуска приложения нужно использовать связку следующих методов:

Применение пользовательского селектора

Множественный выбор

Выборку сразу нескольких пунктов можно настроить через два основных способа установки. Первый – через метод setChoiceMode(ListView.CHOICE_MODE_MULTIPLE). Второй – с помощью параметров ChoiceMode. Установите значение multiplyChoice, атрибут andro . Посмотрев tutorial, вы сможете с легкостью разобраться с этим моментом.

Кнопка под списком

Для размещения под перечнем клавиши, на которую не будет влиять количество пунктов в androidstudiolistview, воспользуйтесь layout_weight.

Листинг размещения кнопки под списком

Плавная прокрутка в начало списка или любую позицию

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

Пример кода плавной прокрутки в начало списка


Настраиваем прокрутку

Полосы прокрутки можно настроить по своему усмотрению. Для этих целей в ListView имеются два атрибута, которые также можно применить к полосам EditText и ScrollView.

Атрибуты, отвечающие за полосу прокрутки

ListActivity

ListActivityнезаменим для упрощенного доступа к компонентам перечня. Это системный раздел, который разработан на основе Activity для эффективного взаимодействия с перечнями. Создать перечни не составит особого труда.

Для этого сначала нужно сделать новый проект. После необходимо найти и удалить activity_main.xml, так как ListActivity, не нуждается в дополнительной разметке. Кликаем по java-файлу и вручную стираем setContentView (R.layout.activity_main). Далее следует известить систему о том, что будет использован экран с перечнем.

Внесите изменения в ячейку publicclass Ваше Название ActivityextendsAppCompatActivity, вместо AppCompatActivity пишем ListActivity. В import вы увидите две строчки, одну из них можно стереть.

Следующим шагом является подготовка сведения для перечня, для их дальнейшего отображения. В качестве места хранения данных выбираем массив и переходим к его формированию.

Формирование и заполнение массива

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

Определение адаптера данных для работы с массивами строк

Далее предлагаем адаптеру только что сформированный массив, ресурсный идентификатор и ListActivity. Последний выполняет роль текущего контекста. Завершающий этап – подключение.

Работа с адаптером Подключение адаптера

Настройка цвета при достижении края прокрутки

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

Код вывода цветового эффекта при достижении края прокрутки

Android ListView не отображается

Мой список не отображается на экране.Android ListView не отображается

Я использую tabhost и помещаю список в рамку, но по какой-то причине он не работает.


Я уверен, что мой код кажется правильным, так не уверен, что здесь не так ..

ответ

Вы hvnt разместил свой полный код, но я просто предполагаю, что вы не могли бы назвать notifyDataSetChanged() после назначения данных в список ..

Ive обновил мой код, не слишком уверен, где поставить то, что вы сказали. – Bimal

Добавьте его после строки listView.setAdapter (адаптер); –

Он говорит, что не может решить метод. – Bimal

Не удается отобразить данные в TextView (ListView)?

Имеем ListView, а так же имеем вот такой layout для элементов ListView (row.xml):

Цукерберг рекомендует:  Делаем красивые CSS списки для сайта

При помощи SimpleCursorAdapter вставляем в этот Layout данные. Методом проб и ошибок удалось установить что в «id/label» данные отображаются замечательно, а вот при попытке отобразить данные в «id/labeldesc» не отображается ровным счетом ничего. Заранее понимаю что грабли где то совсем близко, тем не менее найти причину лично мне пока не удалось. Поначалу думал что причина где то в коде, но попереставляв значения вижу что причина именно в Layout или где то близко, потому как любой набор данных нормально отображается в id/label, при этом напрочь не хочет отображаться во втором TextView.

Заранее спасибо за помощь и извините за в который раз глупые (быть может) вопросы…

ListView в Android: Кастомизация списков

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

Напомню, что статья является переводом этой статьи с разрешения ее автора.

Пример: ListActivity с собственным шаблоном.

Вы можете создать свой собственный шаблон для элементов списка и применить его к своему Адаптеру. Шаблон будет одинаковым для каждого элемента списка, но дальше мы разберем как сделать его более гибким. В нашем примере мы добавим иконку к каждому элементу списка.

Создайте файл шаблона «rowlayout.xml» в папке res/layout вашего проекта «de.vogella.android.listactivity».

Измените свою Деятельность на следующую. Код почти такой же, как и в предыдущем примере, единственная разница в том, что мы используем наш собственный шаблон в ArrayAdapter и указываем адаптеру какой элемент пользовательского интерфейса будет содержать текст. Мы не делали этого в предидущей статье, поскольку мы использовали стандартный шаблон.

Пример: ListActivity с гибким шаблоном

Оба предыдущих примера используют один шаблон сразу для всех строк. Если вы хотите изменить вид определенных строк, вам нужно определить свой адаптер и заместить метод getView().

Этот метод ответственен за создание отдельных элементов вашего ListView. getView() возвращает Вид. Этот Вид фактически является Шаблоном (ViewGroup) и содержит в себе другие Виды, например, ImageView или TextView. С getView() вы так же можете изменить параметры индивидуальных видов.


Чтобы прочитать шаблон из XML в getView(), вы можете использовать системный сервис LayoutInflator.

В этом примере мы расширяем ArrayAdapter, но так же мы можем реализовать непосредственно BaseAdapter.

Определение простого адаптера

Очень просто создать свой Адаптер, не обращая внимания на его оптимизацию. Просто получайте в своей Деятельности данные, которые хотите отобразить и сохраняйте их в элемент списка. В вашем getView() установите ваш предопределенный шаблон для элементов и получите нужные вам элементы с помощью findViewById(). После этого вы можете определить их свойства.

Наш пример использует две картинки: «no.png» и «ok.png». Я положил их в папку «res/drawable-mdpi». Используйте свои картинки. Если не нашли таковых, то просто скопируйте «icon.png» и, с помощью графического редактора, немного измените их.

Создайте класс «MySimpleArrayAdapter», который будет служить нашим Адаптером.

Чтобы использовать этот Адаптер, измените класс MyList на следующее

Когда вы запустите это приложение, вы увидите список с элементами, с разными значками на некоторых из них.

Оптимизация производительности вашего собственного адаптера

Создание Java объектов для каждого элемента — это увеличение потребления памяти и временные затраты. Как уже говорилось, Андроид стирает элементы (виды) вашего списка, которые уже не отображаются и делегируют управление ими в метод getView() через параметр convertView.

Ваш Адаптер может использовать этот вид и избежать «раздутие» Шаблона для этого элемента. Это сохраняет память и уменьшает загрузку процессора.

В вашей реализации вы должны проверять convertView на наличие содержимого и переназначать его, отправляя новые данные в существующий Шаблон, если convertView не пустой.

Наша реализация так же использует модель ViewHolder. Метод findViewById() достаточно ресурсоемок, так что нужно избегать его, если в нем нет прямой необходимости.

ViewHolder сохраняет ссылки на необходимые в элементе списка Шаблоны. Этот ViewHolder прикреплен к элементу методом setTag(). Каждый Вид может содержать примененную ссылку. Если элемент очищен, мы можем получить ViewHolder через метод getTag(). Это выглядит нагруженным, но, на самом деле, работает быстрее, чем повторяющиеся вызовы findViewById().

Обе техники (переназначение существующих видов и модель ViewHolder) увеличивают производительность примерно на 15%, особенно на больших объемах данных.

Продолжая использовать проект «de.vogella.android.listactivity», создайте класс «MyArrayAdapter.java».

Продвинутые ListActivity

Обработка долгого нажатия на элементе

Вы так же можете добавить LongItemClickListener к виду. Для этого получите ListView через метод getListView() и определите обработку длительного нажатия через метод setOnItemLongClickListener().


Элементы, взаимодействующие с моделью данных

Ваш шаблон элемента списка так же может содержать Виды, взаимодействующие с моделью данных. Например, вы можете использовать Checkbox в элементе списка и, если чекбокс включен, вы можете менять данные, отображаемые в элементе.

Мы до сих пор используем тот же проект. Создайте шаблон элемента списка «rowbuttonlayout.xml».

создайте для этого примера класс Model, который содержит название элемента и его содержимое, если он чекнут.

Создайте следующий Адаптер. Этот Адаптер добавит обработку изменения Checkbox. Если чекбокс включен, то данные в модели тоже меняются. Искомый Checkbox получает свою модель через метод setTag().

В завершение измените свой ListView на следующий.

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

Мультивыбор

Так же можно сделать одиночный и мультивыбор. Посмотрите следующие сниппеты для примера. Чтобы получить выбранные элементы используйте listView.getCheckedItemPosition() или listView.getCheckedItemPositions(). Вы так же можете использовать listView.getCheckedItemIds(), чтобы получить ID выбранных элементов.

Хедер и Футер

Вы можете поместить произвольные элементы вокруг своего списка. Например, вы можете создать шаблон со списком между двумя TextView. Если вы так сделаете, то вы должны указать id «@android:id/list» к ListView, т.к. ListActivity ищет Вид с таким идентификатором. В таком случае один TextView всегда будет видимым над ListView (Хедер), а другой будет виден внизу. Если вы хотите использовать Футер и Хедер только в конце/начале списка, чтобы они не были фиксированными, то нужно использовать view.setHeaderView() или view.setFooterView(), например:

Цукерберг рекомендует:  13 способов, как программисту отпугнуть работодателя

SimpleCursorAdapter

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

Создайте новый проект «de.vogella.android.listactivity.cursor» с деятельностью «MyListActivity». Создайте такую деятельность.

Убедитесь, что вы дали приложению доступ к контактам. (Используйте «android.permission.READ_CONTACTS» в AndroidManifest.xml).

Спасибо за внимание. Комментарии и поправки к переводу приветствуются, т.к. даже в исходнике встречаются ошибки и опечатки.

Прошу прощения за репост, изначально не отметил как перевод, поскольку недавно здесь. Большое спасибо за наводку jeston, принял к сведению и научился на ошибках.

ListView не отображается в Android

December 2020


2k раз

Я новичок в разработку приложения для Android.

это мой файл разметки XML.

В этом я в состоянии видеть кнопки, но в виде списка не отображается. любой орган может помочь мне, пожалуйста. заранее спасибо

3 ответы

Change inner Linear Layout’s height from fill_parent to wrap_content.

Because giving height fill_parent will cover the whole height of the parent that will hide the listview

Did you also set an Adapter for your ListView in your onCreate() ? Nothing will be shown on screen if it’s empty, as you’ve also set a transparent background using cacheColorHint and applied wrap_content height to it’s container.

just replace wrap_content in place of fill_parent at button linear Layout.

ListView не отображается в диалоге в андроиде

Я пытаюсь открыть диалоговое окно , в моем андроид приложение , которое показывает выбранный список Bluetooth — устройства поблизости. Я использую ListView в диалоговом окне , чтобы отобразить список и расширить BaseAdapter для его адаптера. Проблема заключается в том, что getView() метод из моих BaseAdapter не дозвонились , даже когда getCount() функция возвращает значение больше 0. Вот мой код:

и вот мой адаптер , для которого getView() метод не вызывает:

и это расположение для ListView элементов:

Еще одна вещь, я пытался изменить этот диалог в новую деятельность , а затем она работала правильно. Проблема заключается в том, что getView() не дозвонились только когда родитель ListView является диалог. Любая идея о том , как это исправить?

Я , наконец , нашел , где проблема. Как диалоговые окна не имеют определенную высоту, они сжимаются их содержание высоты. Я сделал ListView «ы высоту , match_constraint который делает его сжиматься ни к чему. После того, как я поставил его высота wrap_content все работало хорошо. Это была глупая ошибка, но я пишу свой опыт , чтобы поделиться с кем — либо , кто придет по аналогичному вопросу.

Andro >

я должен написать в заголовке вместо » не работает » что-то вроде » яне знаю, как это сделать», но первый вариант лучше себя чувствует :).То, что я пытаюсь сделать, это следующее:

  1. Загрузка из xml web, разобрать его и создать некоторых ArrayListобъекты (сделано и работает)
  2. Отображать объекты, используя специальный Адаптер (не работает)


вторая работает, если я добавляю пунктов моей ArrayList, прежде чем добавить ее квид при помощи

я нашел на веб-что-то вроде этого: (в моем методе onCreate)

затем, следующий код для методов:

OrderManager загрузки и синтаксический анализ xml в Порядок объекты и возвращаетмассив, список тем. Затем я поставил этот список, чтобы мой член список массива m_orders.После загрузки и анализа делается, я бегу returnRes метод на поток пользовательского интерфейсаиспользуя runOnUiThread метод

и я называю notifyDataSetChanged() на мой адаптер.

я делать весь этот хлам расширяет ListView и код адаптерасама перечисленных ниже:

Когда я debug у меня есть данные внутри моего m_orders списке, но когда я называюnotifyDataSetChanged ничего не происходит, я читал, что мне придется выполнитьна UI thread, которая, я думаю, что знаю. Так что проблема ?любая помощь оценили высоко, или, может быть, просто ссылку на хороший учебник повеб-объясняя это вопрос о том, как обновление для списка просмотра в runtime ?

ListView всегда отображается как пустой с выбранным элементом Andro >

У меня есть просмотр списка, в который загружены значения из моей базы данных sqlite, с которой я получал помощь по этому вопросу, который я написал: Загрузка двух столбцов SQL в просмотр списка, но мне нужно отобразить только первый столбец Android [112 ]

Когда пользователь нажимает на элемент, он отображает имя и номер телефона, выбранные при отображении тоста, но во фрагменте «Команды», где я хочу показать, какое имя было выбрано, всегда используется значение по умолчанию: показывает, что просмотр списка пуст, даже когда я щелкнул по элементу в списке, чтобы выбрать его для связи. Я хочу отобразить имя, выбранное в этом текстовом представлении, которое не работает.

Android ListView не отображается

Мой список не отображается на экране.Android ListView не отображается

Я использую tabhost и помещаю список в рамку, но по какой-то причине он не работает.

Я уверен, что мой код кажется правильным, так не уверен, что здесь не так ..

ответ

Вы hvnt разместил свой полный код, но я просто предполагаю, что вы не могли бы назвать notifyDataSetChanged() после назначения данных в список ..

Ive обновил мой код, не слишком уверен, где поставить то, что вы сказали. – Bimal

Добавьте его после строки listView.setAdapter (адаптер); –

Он говорит, что не может решить метод. – Bimal

Понравилась статья? Поделиться с друзьями:
Все языки программирования для начинающих