Android — как отобразить таблицу в Android


Содержание

TableLayout приложения Android

Данная статья является продолжением описания разметки интерфейса приложения Android. В предыдущей статье был представлен обзор с примерами возможных типов разметки. В данной статье рассмотрим табличную разметку TableLayout.

Контейнер TableLayout позволяет формировать табличный интерфейс расположения компонентов, в котором View размещаются в строках и столбцах подобно тому, как это оформляется на WEB-странице в теге

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

Пример табличной разметки, TableLayout

Для наглядного использования контейнера TableLayout создадим layout в рамках приложения p02layout, описанного в начальной части статьи. При создании нового layout определим наименование table (table.xml) и тип контейнера TableLayout. После этого в table.xml создадим интерфейс авторизации пользователя, т.е. включим компоненты ввода логина и пароля с метками пользователя и кнопки выполнения авторизации и закрытия.

Интерфейс формы будет включать 4 строки. В первой строке разместим метку (TextView) и компонент определения логина пользователя (EditText). Во второй строке установим метку (TextView) и компонент определения пароля пользователя (TextPassword). Третья строка останется пустой; она будет определять по вертикали относительное расположение кнопок. В четвертой строке справа разместим кнопки управления (Button).

Добавление строк, TableRow. Для формирования строк интерфейса необходимо использовать объект TableRow, который должен быть дочерним элементом контейнера TableLayout. Каждый компонент TableRow определяет единственную строку в таблице. Строка может не иметь ячеек или иметь одну и более ячеек. Ячейки строки являются контейнерами для других объектов. В ячейку можно вкладывать другой TableLayout или LinearLayout.

Для добавления строки в интерфейс нужно открыть вкладку Layouts в Palette, выделить компонент TableRow и перетащить его либо на страницу, либо в контейнер панели Component Tree. После этого можно таким же образом размещать в строке другие компоненты.

На первом шаге, чтобы не делать лишних телодвижений можно в контейнер поместить сразу 4 строки TableRow. На следующем шаге создадим пустую 3-ю строку с определенным по высоте размером.

Пустая строка. Чтобы создать пустую строку требуемого размера по высоте в 3-ю строку TableRow помещаем контейнер LinearLayout и определяем его размер по высоте; это можно сделать мышкой. Хватаем нижнюю часть компонента (LinearLayout), перемещаем на требуемое расстояние и бросаем (drag-and-drop). Таким образом, можно отделить одну часть интерфейса – компонентов определения учетной записи – от другой (кнопок управления).

Cтрока кнопок управления. Теперь можно в 4-ую строку поместить кнопки управления. Для этого сначала перетаскиваем два пустых компонента Space, и после этого две кнопки «ОК» и «Закрыть». Компонент Space также можно растягивать мышкой по горизонтали. Первый Space будет определять ширину первой колонки для меток, второй Space в совокупности с кнопкой «ОК» будет определять ширину второй колонки, где будут размещаться компоненты ввода параметров учетной записи.

Фоновой цвет строки. Чтобы визуально выделять заголовки или строки таблицы можно определить фоновый цвет TableRow. Для этого следует использовать атрибут «android:background» компонента TableRow.

Растягивание компонентов. Чтобы содержимое компонентов TableRow растянулось на всю ширину макета, необходимо указать в атрибуте «android:stretchColumns» контейнера TableLayout символ ‘*’. Но можно через запятую указать порядковые номера столбцов, которые следует растянуть. Номера столбцов отсчитываются от нуля; остальные колонки занимают минимум места. Например :

Объединение колонок. Смежные ячейки строк можно объединить, чтобы расстянуть компонент на несколько ячеек. Ряды строк объединить нельзя. Слияние ячеек выполняется определением значения целочисленного атрибута «android:layout_span» компонента; layout_span является аналогом атрибута colspan в HTML. Вот как это было выполнено для компонента edLogin в примере :

Рамка в таблице. К сожалению, контейнер TableLayout не может создать рамку для таблицы или ячейки; разработчики Android почему-то не определили эту функциональность. Но данную функциональность Вы можете создать самостоятельно, определяя фоновой цвет таблицы и ячейки.

Ограничение размера колонки. По невнимательности в ячейку таблицы можно вставить очень длинный текст, который растянет ячейку так, что часть текста просто выйдет за пределы экрана. Чтобы избежать данной проблемы необходимо использовать атрибут «android:shrinkColumns» контейнтера TableLayout. С точки зрения программирования приложения данный атрибут управляется методом setColumnShrinkable().

Рассмотрим програмное управление свойством «android:shrinkColumns» на примере. Допустим, что одна из меток в нулевой колонке таблицы имеет очень длинный текст. В интерфейсе мы разместили кнопку btnShrink, по нажатию на которую будем устанавливать флаг «android:shrinkColumns» или сбрасывать. Для этого, необходимо в главном модуле определить логическую переменную (b_shrink), значением которой будет управлять. Код примера представлен в листинге :

Программное создание таблицы. При программном создании таблицы необходимо найти/определить контейнер TableLayout, к которому соответствующим образом добавить необходимое количество строк TableRow. Каждую из строк можно также динамически «оформить». Следующий пример демонстрирует динамическое формирование таблицы, в каждой из ячеек которой размещается изображения.

Интерфейс приложения

Описание возможностей TableLayout и TableRow можно было бы продолжать еще долго. Но, как я полагаю, Вы получили достаточный толчок в понимании того, как можно через интерфейс или программно определить тот или иной атрибут таблицы. Теперь Вам не составит труда самостоятельно соответствующим образом настроить табличный интерфейс приложения.

Возвращаясь к нашему примеру, можно представить внешний вид интерфейса приложения на следующем скриншоте.

Если посмотреть на представление компонентов в дереве (Component Tree), то сразу же бросаются в глаза изображения предупреждения с восклицательными знаками напротив компонентов. В данном случае среда разработки Android Studio нас предупреждает, что текстовые заголовки меток и кнопок необходимо локализовать. Кроме этого необходимо связать метки с компонентами.

Вопрос локализации интерфейса Android Studio рассмотрен на отдельной странице локализациии приложения, а здесь только покажем, как можно бороться с подобными предупреждениями.

Обратите внимание на светло-серый текст возле компонентов tvLogin (@string/lbl_login), tvPassword (@string/lbl_password). Рядом с кнопками подобный текст отсутствует, но имеются предупреждающие сообщения. Это говорит о том, что текст для меток tvLogin и tvPassword используется из ресурсного файла string.xml. Рассмотрим этот файл :

Текст меток

В ресурсном файле определяются наименования ключей и их значения подобно key=value. Для этого в текст файла в формате XML включаются строки с атрибутами (ключами) «name» и соответствующими значеними.


Далее необходимо определенный ключ подключить к метке TextView или к кнопке в опции «android:text». Вот как это выглядит для метки tvLogin :

В описании метки tvLogin определяется идентификатор «android:id», размер метки «android:layout_width», текстовое значение «android:text» и устанавливается связь с компонентом edLogin в опции «android:labelFor». Все эти значения можно определять также через интерфейс в панели атрибутов после выделения компонета.

Текстовое описание интерфейса

В следующем листинге приведено полное описание файла table.xml . Полагаю, что Вам не составит труда самостоятельно подключить локализованные строки к кнопкам.

Старт приложения

Для старта приложения необходимо в активности MainActivity.java в методе onCreate переключиться на интерфейсное описание table.xml :

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

Использование простой базы данных SQLite в Andro >
  • Сайтостроение
  • Статьи
  • Базы данных

В этом руководстве я подробно расскажу о том, как использовать базу данных Android SQLite .

Что такое SQLite

SQLite — это система управления реляционными базами данных, похожая на Oracle , MySQL , PostgreSQL и SQL Server . Она реализует большую часть стандарта SQL , но в отличие от четырех упомянутых выше СУБД она не поддерживает модель « клиент-сервер ». Скорее, она встроена в конечную программу. Это означает, что можно связать базу данных SQLite с приложением и получить доступ ко всем возможностям БД в своем приложении.

Данная СУБД совместима как с Android , так и с iOS , и каждое приложение может создавать и использовать базу данных SQLite . В Android контакты и медиа хранятся и ссылаются на БД SQLite . Она является наиболее используемой СУБД в мире и самым распространенным программным обеспечением . Чтобы узнать о базах данных SQLite как можно больше, посетите официальный сайт SQLite .

Подготовка

Чтобы включить привязку данных в приложении, нужно добавить в файл build.gradle следующий код:

Чтобы использовать как RecyclerView , так и CardView для отображения списков, нужно включить соответствующие библиотеки в разделе зависимостей в файле build.gradle :

Чтобы задействовать все возможности базы данных SQLite , лучше изучить синтаксис SQL .

Описание примера приложения

В нашем Android SQLite примере мы создадим две таблицы: Employer и Employee . Таблица Employee будет содержать ссылку на внешний ключ таблицы Employer . Мы рассмотрим, как вставлять, выбирать, обновлять и удалять строки из таблиц. Я также продемонстрирую, как вывести элементы, выбранные из базы данных SQLite в RecyclerView ( список ) и в Spinner .

У нас есть MainActivity , из которого можно перейти к EmployerActivity ( для работы с таблицей Employer ) или к EmployeeActivity ( для работы с таблицей Employee ):

Классы хранения базы данных SQLite

Классы определяют то, как данные хранятся в базе. SQLite сохраняют значения с помощью пяти доступных классов хранения:

  • NULL — нулевое значение;
  • INTEGER — для целых чисел, содержащих от 1 до 8 байтов;
  • REAL — числа с плавающей запятой;
  • TEXT — текстовые строки, хранящиеся с использованием кодировки базы данных ( UTF-8 или UTF-16 );
  • BLOB — двоичные данные, хранящиеся точно так, как они были введены.

Определение таблиц


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

Начнем с Android SQLite query создания таблицы Employer , а затем перейдем к EmployerActivity .

Рекомендуется размещать логику создания базы х SQLite в классе. Это облегчает устранение возможных неполадок. Назовем наш класс SampleDBContract :

Мы определяем частный конструктор для SampleDBContract , а затем создаем класс для представления таблицы Employer . Обратите внимание: класс Employer реализует интерфейс BaseColumns . Он предоставляет два столбца в нашей таблице. Это столбец _ID , который будет автоматически увеличиваться при добавлении каждой новой строки. И столбец _COUNT , который может использоваться ContentProviders для возврата количества записей, извлекаемых через запрос. Столбец _COUNT не является обязательным. Строка CREATE_TABLE компилируется в следующий оператор SQL :

На данный момент в нашем Android SQLite примере мы определили схему таблицы Employer .

Создание базы данных с помощью SQLiteOpenHelper

Самый простой способ управления созданием базы данных и версиями — создать подкласс SQLiteOpenHelper . Он упрощает управление базой данных SQLite , создавая БД, если они не существуют. Необходимо только переопределить методы onCreate() и onUpgrade() , чтобы указать нужное действие для создания или обновления базы данных:

Теперь в нашем примере Android database SQLite задаем для нашей базы данных SQLite имя ( sample_database ). Конструктор вызывает конструктор суперкласса с именем и версией базы данных. В onCreate мы указываем объекту SQLiteDatabase выполнить оператор Employer CREATE_TABLE SQL . Через onUpgrade мы сбрасываем таблицу Employer и создаем ее снова:

Таблица Employer имеет три столбца: name , description и founded_date . Нажатие кнопки сохранения вызывает метод saveToDB() :

В saveToDB() мы получаем ссылку на объект SQLiteDatabase , используя метод getWritableDatabase() из SQLiteOpenHelper . Этот метод создает базу данных, если она еще не существует, или открывает ее, если она уже создана. GetWritableDatabase возвращает объект SQLiteDatabase , который открывает доступ на чтение / запись:

В приведенном выше фрагменте кода есть четыре момента:

  1. Мы получаем объект SQLiteDatabase , который открывает доступ на запись в базу данных;
  2. Значения, которые будут храниться в базе данных, помещаются в объект ContentValue с именем столбца в качестве ключа;
  3. Мы помещаем Date в объект ContentValue , который переводится в класс хранения данных Android SQLite INTEGER ;
  4. При вставке строки в базу данных с помощью метода database.insert() возвращается идентификатор строки.

Выбор данных из базы данных SQLite

Подобно тому, как мы применили метод getWritableDatabase() , можно вызвать getReadableDatabase() объекта SQLiteOpenHelper для получения объекта SQLiteDatabase , который можно использовать для чтения информации из базы данных. Стоит отметить, что объект SQLiteDatabase , возвращаемый getReadableDatabase() , предоставляет собой тот же самый доступ на чтение / запись в базу данных, который был возвращен функцией getWritableDatabase() , за исключением тех случаев, когда существуют определенные ограничения. Например, файловая система, содержащая заполненную базу данных, и база данных может быть открыта только для чтения.

Метод readFromDB будет запрашивать БД, и возвращать все строки из таблицы Employer , в которых имя или описание из таблицы Employer совпадает со значением, введенным в EditText . А также строки, в которых дата основания компании совпадает со значением, введенным в EditText :

В коде Android SQLite query , приведенного выше, projection является массивом String , представляющим столбцы, которые мы хотим получить. selection является строковым представлением условия SQL WHERE , отформатированным таким образом, что символ ‘?’ будет заменен аргументами в массиве selectionArgs String . Вы также можете группировать, фильтровать и сортировать результаты запроса. Вставка данных в базу SQLite с использованием описанного выше метода защищает от SQL-инъекций .

Обратите внимание на объект, возвращаемый запросом — Cursor . В следующем разделе мы покажем, как вывести содержимое Cursor с помощью RecyclerView .

Отображение содержимого объекта Cursor в RecyclerView

Cursor предоставляет произвольный доступ к набору результатов, возвращаемому запросом к базе данных. Это означает, что через Cursor можно получить доступ к значениям в любом месте, подобно Java-спискам или массивам. Благодаря этому приему можно реализовать RecyclerView с использованием Cursor так же, как мы реализуем RecyclerView с помощью ArrayLists . Вместо вызова List.get(i) , вы перемещаете Cursor в нужную позицию, используя moveToPosition() . После этого вызываете соответствующий метод getXXX(int columnIndex) , где XXX — это Blob , Double , Float , Int , Long , Short или String .

Чтобы не беспокоиться о корректных индексах столбцов из метода readFromDB() , примененного выше, мы используем метод getColumnIndexOrThrow() , который извлекает индекс указанного столбца или генерирует исключение, если имя столбца не существует внутри объекта Cursor :

Определение внешних ключей

На данный момент в нашем Android SQLite примере мы создали таблицу Employer , которую заполнили строками. Теперь создадим таблицу Employee , которая связана с таблицей Employer через столбец _ID Employer . Мы определяем класс Employee , который расширяет BaseColumns в классе SampleDBContract . Обратите внимание, что при создании таблицы Employee использовали « FOREIGN KEY(employer_id) REFERENCES employer(_id) «:

Обновление SQLiteOpenHelper

На данный момент в Android Studio SQLite у вас должна быть создана таблица Employer и в нее добавлены значения. Если вы не изменяете версию базы данных, новая таблица Employee не будет создана. К сожалению, если вы измените версию через повторный вызов метода onUpgrade() , то таблица Employer будет сброшена. Чтобы предотвратить это, можно закомментировать или удалить оператор drop в методе onUpgrade() и добавить оператор execSQL() для создания таблицы Employee . Поскольку таблица Employee ссылается на таблицу Employer , сначала необходимо создать таблицу Employer :


Отображение данных из запроса SQLite в Spinner

Чтобы создать работника в таблице Employee , пользователю необходимо выбрать соответствующего работодателя в таблице Employer . Для этого можно предоставить пользователю Spinner . Отобразить содержимое Cursor в Spinner довольно просто.

Сначала мы выполняем Android SQLite query , как было описано выше, выбираем только name из Employer и id (queryCols) . Затем создаем экземпляр SimpleCursorAdapter , передавая ему Cursor , массив столбцов для отображения ( adapterCols ) и массив представлений, с помощью которых должны отображаться столбцы ( adapterRowViews ). Затем устанавливаем Spinner Adapter для SimpleCursorAdapter :

Вставка внешнего ключа в базу данных

Вставка строки, содержащей внешний ключ, полностью идентична вставке строк в таблицу без ограничений по внешнему ключу. Разница заключается в том, что в Android SQLite примере мы получаем ссылку на выбранный объект Cursor из Spinner , а затем — значение столбца _ID Employer :

Выборка данных из базы SQLite с помощью JOIN

Нельзя использовать метод SQLiteDatabase query() для выполнения запроса к нескольким таблицам. Для этого нужно составить собственный SQL-запрос . В приведенном ниже примере запрос определяется в классе SampleDBContract :

Обратите внимание, что в условии WHERE мы используем символ « ? ». Чтобы не нарушить синтаксис SQL нужно определить selectArgs String [] со значениями, которые будут заменять в предоставленном SQL-запросе символ « ? »:

В заключении

Полная версия исходного кода доступна на github для использования и изменения. Базы данных Android SQLite — это мощное средство, доступное для всех мобильных приложений.

Данная публикация представляет собой перевод статьи « Using a simple SQLite database in your Android app » , подготовленной дружной командой проекта Интернет-технологии.ру

Как создать таблицу в Andro >

Я хочу создать таблицу в android с несколькими столбцами. Большинство примеров, которые я видел, состоит из двух столбцов. (Я новичок в Java и Android.) Мне нужно 3-4 столбца, и я должен иметь возможность динамически добавлять строки в таблицу. Может ли кто-нибудь предоставить мне образец кода. (Я использую eclipse в выигрыше 7)

Я предполагаю, что вы говорите о представлении TableLayout, а не в таблице в базе данных?

Если это так, вот пример XML таблицы с тремя столбцами и тремя строками.

Каждый элемент создает строку в таблице, и каждый вид внутри элемента создает «столбец». Я использовал TextViews, но они могут быть ImageViews, EditText и т. Д.

Чтобы динамически изменить их в коде, у вас будет что-то вроде этого:

показать данные в виде таблицы в andro >

Я хочу получить данные из database в моем android table view .

должен ли я использовать loop? Статика хороша для этого?

6 ответов

Это может быть полезным для вас..

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

С большим количеством данных создайте ListView и адаптер, например, на основе CursorAdapter:

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


в ListView добавьте верхний и Нижний колонтитулы, если хотите.

для этого у вас есть XML для этого у вас есть XML, как

чтобы показать данные в android вы пишете.

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

наш код будет выглядеть это:

результат может выглядеть так:

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

мы могли бы представить себе пользовательский компонент для android: TableView.

DevPad.RU – записки разработчика

Android. Обзор TableLayout

Диспетчер компоновки TableLayout является расширением компоновки LinearLayout . Этот диспетчер выстраивает вложенные элементы в строки и столбцы, как и в любой таблице.
Для использования этой компоновки, нужно в контейнере TableLayout создать элементы TableRow , которые будут являться строками и выстраиваться вертикально. Внутри TableRow можно размещать другие элементы и они будут выстраиваться горизонтально.

Начнём с простого примера:

Пример 1

Разберём как это работает. Вначале создаём контейнер разметки TableLayout и вкладываем в него 3 элемента TableRow .
У нас получилось 4 строки в таблице. Далее создаём столбцы таблицы и для этого в каждый элемент TableRow вкладываем по 3 элемента TextView . В первом напишем названия столбцов, а во вторых названия. Для того, чтобы визуально отделить заголовки таблицы, мы зададим фоновый цвет для первого TableRow .
Чтобы содержимое элементов TableRow растянулось на всю ширину макета, нужно указать у TableLayout значение атрибуте android:stretchColumns равным звёздочке.
Вообще, через запятую можно указать порядковые номера столбцов, которые нужно растянуть. Номера столбцов указываем начиная с нуля. Остальные займут минимум места.
Давайте рассмотрим подробнее эту функциональность на примере.

Атрибуты stretchColumn

Пример 2

В этом примере, в первой таблице мы задали атрибут strechColumn равным «0,3,5»
И как видно из картинки, столбцы с индексами 0, 3 и 5 растянулись равномерно, а остальные заняли минимум места. Как я уже писал выше, индекс считается с нуля.
Для сравнения, у следующей таблицы мы указали, чтобы растянулись все столбцы, значением звёздочкой andro .

На JAVA это задаётся методом setStretchAllColumns(true) (для растягивания всех столбцов).
Чтобы задать определённые столбцы, нужно воспользоваться методом setColumnStretchable(int index, boolean isStretchable) . Для каждого индекса нужно вызывать этот метод отдельно, например:

Атрибут layout_span

Если Вы знакомы с построением таблиц, на HTML, то наверняка знаете атрибут colspan у тега , который отвечает за объединение нескольких столбцов в один. Так вот, мы тоже можем это сделать в нашей компоновке при помощи атрибута android:layout_span у вложенного элемента в TableRow и указав значение в виде целого числа, означающего количество объединённых столбцов.
Как видите, первая кнопка растянулась на 3 столбца, а третья на 2.

Программно это можно реализовать при помощи вложенного в TableLayout класса LayoutParams .
Пример:

Рамка в таблице

Пример 3

Как видно у 2 и 3 строки мы задали у текста фоновый цвет в белый и серый, он перекрыл чёрный фоновый у таблицы и от неё остались одни лишь рожки, да ножки чёрточки.

Урок 3. Создание списков и карточек в andro >


Перевод документации официального сайта developer.android.com

Чтобы использовать виджет RecyclerView, вы должны установить адаптер и layout менеджер. Чтобы создать адаптер, унаследуйтесь от класса RecyclerView.Adapter. Детали реализации зависят от особенностей вашего набора данных типа views. Для получения дополнительной информации посмотрите примеры ниже.

Layout менеджер располагает элементы view в RecyclerView и определяет, когда снова использовать элементы view, которые больше не видны пользователю. Для повторного использования view, layout менеджер может попросить адаптер заменить содержимое view другими элементами из набора данных. Таким образом повторное использование view повышает производительность путем избежания создания ненужных view или выполнения затратного поиска findViewById().

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

  • LinearLayoutManager показывает элементы в списке с вертикальной или горизонтальной прокруткой.
  • GridLayoutManager показывает элементы в сетке.
  • StaggeredGridLayoutManager показывает элементы в ступенчатой сетке.

Чтобы создать пользовательский layout менеджер, унаследуйтесь от класса RecyclerView.LayoutManager.

Анимации

Анимации для добавления и удаления элементов по умолчанию включены в RecyclerView. Чтобы настроить эти анимации, унаследуйтесь от класса RecyclerView.ItemAnimator и используйте метод RecyclerView.setItemAnimator().

Примеры

Следующий пример кода показывает, как добавить RecyclerView в layout:

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(), например:


SimpleCursorAdapter

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

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

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

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

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

sqlite — Как отобразить таблицу в Andro >

Прошу совета, если есть у кого опыт, как отобразить данные таблиц SQLite в виде таблицы, с заголовком, таблицей и, возможно, подвалом. ListView настроить можно, наверное, даже если поместить его в горизонтальный ScrollView — должно работать, но остается открытый вопрос с заголовком таблицы и подвалом. Посмотрел библиотеки на Android Arsenal. к ним есть несколько вопросов. Нет обработчиков нажатия, но не это самое страшное, они не работают с аналогами адаптеров. т.е. надо всю таблицу базы данных выводить сразу, т.е. пихать ее всю в память телефона, что не есть гут.

Создание расписания уроков для андроид устройств. Часть 2. База данных SQLITE и фрагменты

В этом уроке продолжим модифицировать наше приложение Расписания уроков для андроид устройств, и изменим принцип загрузки данных во фрагменты.

В предыдущей версии информация поступала из строковых массивов, которые были созданы в файле String.xml, посредником между данными и приложением являлся Array Adapter, а сегодня сделаем загрузку из базы данных SQLite.

Она будет находиться в apk файле, вместе с самим приложением, так что никаких настроек или манипуляций не нужно будет делать. Установил, открыл — работает.

Кто не читал статью «Создание расписания уроков для андроид устройств. Array Adapter для фрагментов» переходите по ссылке, в ней вы сможете скачать файл проекта, который будем редактировать.

Создание базы данных в Excel

В прошлой статье я не оговорился, сказав, что базу данных будем делать в Excel. Давайте создадим таблицу с расписанием уроков, по классам, дням недели и перечнем занятий.
Для этого в новой книге дадим названия полей таблицы:

  • class — номер класса(11-6)
  • day — день недели(1-5)
  • urok_id- порядок уроков
  • urok — название предмета.

На втором листе книги напишем номер предмета и название, с помощью функции на первом листе в столбец urok введем формулу =СЛУЧМЕЖДУ(1;13) так как на втором листе 13 предметов, а в соседнюю ячейку =ВПР(D2,Лист2!A:B;2;0) для получения списка пердметов.

Использование DB Browser for SQLite

Затем скопируем как значения получившийся список на новый лист и сохраним его как CSV(разделитель — запятые).

Далее нам понадобится программа DB Browser for SQLite (я пользуюсь версией 3.5.1), в которой создадим новую базу данных(New Database), назавем ее 1.sqlite.

Нажмем File->Import->Table from CSV file. укажем путь к сохраненной ранее книге, присвоим название таблице myrasp, поставим галочку Column name in first line, кодировка Other — CP1251, разделитель «;» и нажмем Ok.

Модифицируем таблицу myrasp, нажав ПКМ, добавим новое поле(Add field) «_id» с типом text или integer, отметим галочками PK(первичный ключ) и AI(автоинкремент). Поле «_id» можно поднять выше в списке полей таблицы.

Создание директории assets

Вернемся в Android Studio и создадим папку assets для хранения нашей базы данных SQLite, нажав в проекте ПКМ: New->Folder->Asset Folder. Если вы скопируете 1.sqlite то можно сразу в эту папку вставить файл, я же в Total Comander переименую в rasp.sqlite и скопирую в проект в папку assets. Когда мы перейдем в среду разработки Android Studio, то в папке будет видна наша база.


Изменения не коснутся файлов MainActivity.java и MainActivity11.java, будем использовать код из предыдущего проекта. В файле fragment_main11.java, отвечающем за отображение уроков понедельника уберем конструкцию switch(classId)<> целиком, удалим переменную ListAdapter adapter.

Класс DatabaseHelper.java для работы с базой данных

Создадим новый класс DatabaseHelper.java, он понадобится для связи с базой данных, открытия, чтения данных.

Данный код универсален для любых проектов, в настройках можно менять названия переменных DB_NAME, TABLE, COLUMN_.

Настройки таблицы

Напишем название базы данных и таблицы в переменные

Присвоим поля таблицы myrasp переменным

Хочу обратить ваше внимание на переменную DB_PATH, которую я для упрощения написал просто «/data/data/»+название пакета+»/database/». В моем случае название пакета — ru.maxfad.myraspisanie, у вас может и будет отличаться для других приложений.

Работа с фрагментами

Теперь откроем fragment_main11.java, в который добавим метод onCreateView

Поскольку нам нужно получить доступ к фрагменту из активности напишем функцию, в которой свяжемся со слоем фрагмента fragment_main11.xml, а в переменную mList получим ListView для отображения уроков

Во fragment_main11.xml удалим секцию разметки TextView и переименуем id ListView

Добавим переменные для работы с базой данных

В метод onActivityCreate напишем новый экземпляр класса DatabaseHelper и создадим базу данных

Напишем метод onResume в котором и будет происходить выборка данных из таблицы myrasp, выполняться SQL запрос и формироваться список уроков

Как вы можете обратить внимание, в строке » and day=1″ и заключается принцип загрузки данных по дням недели, в остальных фрагментах код будет отличаться только номером дня.

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

Архив с кодом проекта можно скачать по ссылке ниже, обязательно посмотрите видеоролик по материалам статьи, в нем есть БОНУС: на примере этого приложения я покажу, как работать в Android Studio с макетом с помощью BluePrint+Design.

А на сегодня все, делитесь этой статьей в соцсетях и подписывайтесь на канал YouTube.

Cкачать архив для ознакомления — проект Расписание для уроков:

Создание расписания уроков для андроид устройств. Часть 2. База данных SQLITE и фрагменты + БОНУС :

Рекомендуем смотреть видео в полноэкранном режиме, в настойках качества выбирайте 1080 HD, не забывайте подписываться на канал в YouTube, там Вы найдете много интересного видео, которое выходит достаточно часто. Приятного просмотра!

Как отобразить таблицу в Android?

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

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

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

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