Статьи

Дизайн пользовательского интерфейса Android: создание приложения ListView

ListView — это один из наиболее полезных элементов управления представлением, доступных на платформе Android для отображения переменных объемов данных. В этом уроке Mobiletuts + мы покажем вам, как использовать ListView для просмотра списка статей!

За последние несколько месяцев вы видели много учебных пособий по различным элементам управления макетом. Вы будете использовать несколько из них в сочетании с ListView в сегодняшнем уроке. Само приложение будет очень простым: оно будет отображать список заголовков статей, которые при нажатии отображают содержание статьи. Темп этого урока будет быстрее, чем в некоторых наших начальных уроках; вам, возможно, придется ознакомиться с некоторыми другими нашими учебниками на этом сайте или даже в справочнике по API Android, если вы не знакомы с основными элементами управления или концепциями Android. Окончательный код с открытым исходным кодом доступен для скачивания на хостинге Google Code .

Создайте новый проект Android в Eclipse. Мы назвали наш MT-List с начальным действием TutListActivity. Это действие должно расширять класс ListActivity, который является специальным классом Activity, который помогает управлять элементом управления ListView. Мы используем целевой уровень API 10 (Android 2.3.3).

На самом деле, здесь очень мало дизайнерских работ. Элемент управления ListView состоит из повторяющихся элементов, каждый из которых имеет одинаковый макет (шаблон для элемента). Мы хотим отобразить список заголовков статей. Каждый заголовок будет отдельным элементом в ListView. Следовательно, шаблон для каждого элемента списка должен иметь только элемент управления TextView. Добавьте новый файл ресурсов макета в ваш проект с именем list_item.xml, который представляет макет шаблона для каждого элемента в списке. В этом случае это должно выглядеть так:

1
2
3
4
5
6
7
<?xml version=»1.0″ encoding=»utf-8″?>
<TextView
    xmlns:android=»http://schemas.android.com/apk/res/android»
    android:layout_width=»fill_parent»
    android:layout_height=»wrap_content»
    android:textSize=»24dp»
    android:padding=»6dp» />

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

Элементы управления ListView предназначены для загрузки данных из источника данных. Адаптер можно использовать для чтения из базы данных, массива или другого источника данных. Мы будем использовать реализацию массива для этого приложения. Позже вы всегда можете заменить массив каким-либо источником данных в реальном времени. Создайте два ресурса строкового массива в своем проекте (вы можете добавить их в strings.xml или в отдельный файл arrays.xml, на ваш выбор). Назовите один массив «tut_titles», а другой — «tut_links». Заполните массивы действительными заголовками и действительными URL-адресами с веб-сайта Mobiletuts +. Вот наши массивы:

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<string-array name=»tut_titles»>
    <item>Design &amp;
    <item>Best of Tuts+ in February 2011</item>
    <item>Create a Brick Breaker Game with the Corona SDK: Game Controls</item>
    <item>Exporting Graphics for Mobile Apps: PNG or JPEG?</item>
    <item>Android Tablet Design</item>
    <item>Build a Titanium Mobile Pizza Ordering App: Order Form Setup</item>
    <item>Create a Brick Breaker Game with the Corona SDK: Application Setup</item>
    <item>Android Tablet Virtual Device Configurations</item>
    <item>Build a Titanium Mobile Pizza Ordering App: Topping Selection</item>
    <item>Design &amp;
</string-array>
<string-array name=»tut_links»>
    <item>http://mobile.tutsplus.com/tutorials/mobile-design-tutorials/80s-phone-app-slicing/</item>
    <item>http://mobile.tutsplus.com/articles/news/best-of-tuts-in-february-2011/</item>
    <item>http://mobile.tutsplus.com/tutorials/corona/create-a-brick-breaker-game-with-the-corona-sdk-game-controls/</item>
    <item>http://mobile.tutsplus.com/tutorials/mobile-design-tutorials/mobile-design_png-or-jpg/</item>
    <item>http://mobile.tutsplus.com/tutorials/android/android-tablet-design/</item>
    <item>http://mobile.tutsplus.com/tutorials/appcelerator/build-a-titanium-mobile-pizza-ordering-app-order-form-setup/</item>
    <item>http://mobile.tutsplus.com/tutorials/corona/corona-sdk_brick-breaker/</item>
    <item>http://mobile.tutsplus.com/tutorials/android/android-sdk_tablet_virtual-device-configuration/</item>
    <item>http://mobile.tutsplus.com/tutorials/appcelerator/pizza-ordering-app-part-2/</item>
    <item>http://mobile.tutsplus.com/tutorials/iphone/1980s-phone-app_interface-builder-setup/</item>
</string-array>

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

Теперь, когда у приложения есть данные, пришло время их отобразить. Вернувшись в TutListActivity.java, измените метод onCreate() чтобы использовать метод setListAdapter() для загрузки данных. В отличие от обычных действий, ListActivity не требует использования setContentView() для случаев, когда все действие является просто ListView. Когда это будет сделано, вся ваша ListActivity теперь будет выглядеть так:

На этом этапе вы можете запустить приложение. Теперь вы увидите ListView со всеми заголовками учебных пособий. Прокрутка вверх и вниз работает как положено. Однако нажатие на заголовок еще ничего не делает.

Android Listview Рисунок 1

Обработка щелчков мышью по элементам в ListView осуществляется аналогично другим объектам View: с помощью слушателя. В этом случае нас интересует OnTimeClickListener . Возможно, вы заметили, что мы ни разу не имели дело с объектом ListView напрямую. Сейчас самое время. В ListActivity просто вызовите метод getListView() чтобы получить ListView, а затем вызовите метод setOnItemClickListener() и реализуйте все это за один раз:

Метод onItemClick() будет вызываться каждый раз, когда пользователь нажимает на определенный элемент в ListView. Удобно, что он передает несколько полезных параметров, один из которых нам понадобится для запуска действия зрителя. Подождите, какая активность зрителя?

Хороший вопрос. Давайте создадим активность зрителя сейчас! Это действие будет использоваться для отображения содержимого учебника для пользователя. Создайте новый класс, расширив Activity и назовите его TutViewerActivity.java. Создайте для него файл ресурсов макета, который содержит ровно один элемент: элемент управления WebView. Файл макета должен выглядеть так:

1
2
3
4
5
6
7
<?xml version=»1.0″ encoding=»utf-8″?>
<WebView
    xmlns:android=»http://schemas.android.com/apk/res/android»
    android:layout_width=»match_parent»
    android:layout_height=»match_parent»
    android:id=»@+id/tutView»>
</WebView>

В onCreate() класса TutViewerActivity вызовите метод setContentView() и передайте этот макет. Наконец, не забудьте добавить действие в файл AndroidManifest.xml.

На мгновение переключите свое внимание на TutListActivity. Давайте посмотрим, что нам нужно сделать, чтобы запустить просмотрщик Activity, с соответствующей ссылкой на статью. Внутри onItemClick() позиция элемента, по которому щелкнули, передается как значение типа int . Это именно то, что нам нужно для доступа к массиву ссылок на статьи.

Строковые значения в массиве ссылок являются URL-адресами. Удобный способ передать URL другому действию — добавить Uri в Intent с помощью метода setData() . Вот окончательная реализация onItemClick() которая запускает действие средства просмотра, передавая соответствующий URL:

Если вы просто onCreate() это в конец метода onCreate() , вы заметите, что переменная links еще не определена. Поскольку он будет использоваться в классе OnItemClickListener, переменная должна быть конечным значением, например:

Эта строка должна быть помещена перед определением OnItemClickListener. Да, вы могли бы сделать его переменной-членом, не будучи окончательным. Для более сложного случая это может даже понадобиться. Но в этом случае мы можем фактически сохранить весь код внутри метода.

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

Верните свое внимание на TutViewerActivity.java. После setContentView() добавьте код, чтобы извлечь Uri из переданного Intent и преобразовать его в переменную String. Затем добавьте вызов в метод loadUrl() класса WebView. Весь класс TutViewerActivity теперь будет выглядеть так:

Запустите приложение сейчас. Это работает? Еще не совсем! И последняя деталь: вам нужно добавить интернет-разрешение в файл AndroidManifest.xml. Теперь запустите приложение. Теперь вы увидите, что реализация работает:

Android Listview Рисунок 2

Опыт, как есть, работает. ListView показывает все заголовки статей, пользователь может щелкнуть конкретный элемент списка и быть перенаправлен на действие с WebView, чтобы отобразить соответствующий URL-адрес. Некоторые усовершенствования, которые вы могли бы рассмотреть для этой базовой реализации, включают:

  • Установка начального увеличения для просмотра в браузере для дальнейшего уменьшения
  • Настройка WebView для большего контроля над просмотром веб-страниц
  • Загрузка списка учебников динамически, а не через статический массив
  • Добавление необычных визуальных атрибутов в ListView
  • Лучшее использование больших экранов (то есть фрагментов)
  • Добавление дополнительной информации к элементам ListView: субтитры, уровни сложности, значки, индикаторы «чтение», избранное и т. Д.

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

Виджет ListView — это быстрый способ упорядочить данные в виде списка на экране. Мы только поцарапали поверхность элемента управления ListView в этом уроке. Однако вы узнали основы: создания элементов списка, работы с адаптерами данных и обработки щелчков элементов списка.

Разработчики мобильных приложений Лорен Дарси и Шейн Кондер являются соавторами нескольких книг по разработке Android: углубленная книга по программированию под названием « Разработка беспроводных приложений для Android» и « Самс научи себя разрабатывать приложения для Android за 24 часа» . Когда они не пишут, они тратят свое время на разработку мобильного программного обеспечения в своей компании и оказание консультационных услуг. С ними можно связаться по электронной почте [email protected] , через их блог на androidbook.blogspot.com и в Twitter @androidwireless .