Для упрощения доступа к элементам списка используется класс ListActivity. ListActivity представляет собой класс, унаследованный от Activity и разработанный специально для работы со списками.
Итак, посмотрим на примере. Во-первых, определим в файле разметки activity_main.xml элемент ListView:
<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent"> <ListView android:id="@android:id/list" android:layout_width="0dp" android:layout_height="0dp" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" /> </androidx.constraintlayout.widget.ConstraintLayout>
Обратите внимание на объявление идентификатора ListView: android:id="@android:id/list"
. Подобное объявление обязательно,
чтобы ListActivity распознала список и могла бы им управлять.
Кроме ListView в файле разметки интерфейса также могут быть и другие элементы. Но в данном случае ограничимся только элементом ListView.
Далее изменим код класса MainActivity:
package com.example.listapp; import android.app.ListActivity; import android.os.Bundle; import android.view.View; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.Toast; public class MainActivity extends ListActivity { String[] countries = { "Бразилия", "Аргентина", "Колумбия", "Чили", "Уругвай"}; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); // создаем адаптер ArrayAdapter<String> adapter = new ArrayAdapter(this, android.R.layout.simple_list_item_1, countries); setListAdapter(adapter); AdapterView.OnItemClickListener itemListener = new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View v, int position, long id) { Toast.makeText(getApplicationContext(), "Был выбран пункт " + parent.getItemAtPosition(position).toString(), Toast.LENGTH_SHORT).show(); } }; getListView().setOnItemClickListener(itemListener); } }
Теперь класс MainActivity расширяет базовый класс ListActivity.
Здесь как и в случае с ListView мы создаем адаптер ArrayAdapter, только устанавливаем его через метод setListAdapter
,
который определен у ListActivity.
Далее создается объект слушателя OnItemClickListener, который будет обрабатывать выбор элементов списка. Его единственный
метод onItemClick
аналогичен тому, что разбирался в прошлом разделе, за тем исключением, что здесь мы выводим сообщение с текстом
выбранного элемента.
В конце мы используем метод getListView()
, который возвращает объект ListView. И затем устанавливаем для него вышеопределенный
слушатель.