В этом уроке я расскажу как создать простой ListView на Android. Вы узнаете что такое Adapter и какой он бывает, а также как обрабатывать нажатия на элементы списка.
Что такое ListView в Android?
ListView представляет собой элемент
view
, который группирует несколько элементов и отображает их в вертикальном списке, который можно прокручивать.
Элементы списка автоматически вставляются в список с помощью адаптера, который подгружает контент из различных источников. Это может быть как статический массив элементов, так и база данных или что-то другое. ListView один из базовых и наиболее используемых компонентов юзер интерфейса в Android. Он гибкий в настройке и удобный в использовании.
Как использовать Adapter в Android
Adapter фактически является мостом между источником данных и компонентами пользовательского интерфейса. В адаптер передаются данные с источника (массив, база данных), после этого адаптер заполняет полученным контентом различные элементы юзер интерфейса, например в ListView
, GridView
или другие.
Такие элементы, как ListView
и GridView
являются подклассами AdapterView
и они могут взаимодействовать с адаптером, который извлекает данные из внешнего источника и создает элемент View
. Наиболее используемыми в Android адаптерами являются ArrayAdapter, SimpleCursorAdapter, SpinnerAdapter, WrapperListAdapter, BaseAdapter
и CursorAdapter
.
Работа с ListView: обработка нажатий
Android предоставляет метод onListItemClick()
для обработки нажатий на элементы ListView
. В качестве параметров метод принимает набор свойств, определяющих нажатый элемент в ListView
.
Пример использование ListView в Android
Для начала нам нужно создать простейший Android проект. Как это сделать описано здесь. После создания проекта нужно добавить в xml файл под названием strings.xml
следующие строки:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<?xml version="1.0" encoding="utf-8"?> <resources> <string-array name="languages"> <item>Java</item> <item>JavaScript</item> <item>C#</item> <item>Objective-C</item> <item>C</item> <item>C++</item> <item>Python</item> <item>Swift</item> <item>GO</item> <item>PHP</item> </string-array> </resources> |
Обратите внимание: с помощью тегов <string-array>...</string-array>
в xml файле объявляется массив строк. Элементом этого массива будет то, что находится в теге <item>...</item>
.
Каждый элемент ListView будет выглядеть представлять собой простой виджет TextView. Как он будет выглядеть представлено в отдельном макете listview_item.xml
:
1 2 3 4 5 6 7 8 9 10 |
<?xml version="1.0" encoding="utf-8"?> <!-- Так будет выглядеть каждый элемент в нашем ListView --> <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/textview_item" android:layout_width="match_parent" android:layout_height="match_parent" android:padding="12dp" android:textSize="15dp" android:textStyle="bold" > </TextView> |
Последовательность действий:
- Данные из нашего файла
strings.xml
нужно представить в качестве массива строк (String[]
) - Полученный массив предоставить в качестве параметра адаптеру.
- После установки адаптера мы должны добавить обработчик нажатий на элементы
ListView
. - В обработчике создать всплывающее окно, которое будет показывать текст в нажатом элементе
ListView
.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
package ua.com.prologistic.listview; import android.app.ListActivity; import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.ListView; import android.widget.TextView; public class MainActivity extends ListActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //1. Сохраняем массив строк из xml в String[] String[] langs = getResources().getStringArray(R.array.languages); //2. Устанавливаем полученный массив в адаптер this.setListAdapter(new ArrayAdapter<>(this, R.layout.list_item, R.id.textview, langs)); // получаем ссылку на объект ListView ListView listView = getListView(); //3. Устанавливаем слушатель на элементы listView listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { public void onItemClick(AdapterView<?> parent, View view, int position, long id) { // получаем элемент, на который нажал пользователь String language = ((TextView) view).getText().toString(); //4. Создаем всплывающий Toast с текстом нажатого элемента Toast.makeText(MainActivity.this, language, Toast.LENGTH_LONG).show(); } }); } } |
Все, теперь можно запустить приложение. В результате получим такое:
Следите за обновлением раздела Программирование под Android
Thanks for that! It’s just the answer I needed.