top of page

Android представляет широкую палитру элементов,которые представляют списки. Все они является наследниками класса android.widget.AdapterView. Это такие виджеты как ListView, GridView, Spinner. Они могут выступать контейнерами для других элементов управления

При работе со списками мы имеем дело с тремя компонентами. Во-первых, это сам элементы списков (ListView, GridView), которые отображают данные. Во-вторых, это источник данных - массив, объект ArrayList, база данных и т.д., в котором находятся сами отображаемые данные. И в-третьих, это адаптеры - специальные компоненты, которые связывают источник данных с элементом списка.

Рассмотрим связь элемента ListView с источником данных с помощью одного из таких адаптеров - класса ArrayAdapter.

7.1.ArrayAdapter

Класс ArrayAdapter представляет собой простейший адаптер, который связывает массив данных с набором элементов TextView, из которых, к примеру, может состоять ListView. То есть в данном случае источником данных выступает массив объектов. ArrayAdapter вызывает у каждого объекта метод toString() для приведения к строковому виду и полученную строку устанавливает в элемент TextView.

Посмотрим на примере. Итак, разметка приложения может выглядеть так:

<?xml version="1.0" encoding="utf-8"?>

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:id="@+id/activity_main"

    android:layout_width="match_parent"

    android:layout_height="match_parent">

 

    <ListView

        android:id="@+id/countriesList"

        android:layout_width="match_parent"

        android:layout_height="match_parent">

    </ListView>

 

</RelativeLayout>

Здесь также определен элемент ListView, который будет выводить список объектов. Теперь перейдем к коду activity и свяжем ListView через ArrayAdapter с некоторыми данными:

import android.support.v7.app.AppCompatActivity;

import android.os.Bundle;

import android.widget.ArrayAdapter;

import android.widget.ListView;

 

public class MainActivity extends AppCompatActivity {

 

    // набор данных, которые свяжем со списком

    String[] countries = { "Бразилия", "Аргентина", "Колумбия", "Чили", "Уругвай"};

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main);

 

        // получаем элемент ListView

        ListView countriesList = (ListView) findViewById(R.id.countriesList);

 

        // создаем адаптер

        ArrayAdapter<String> adapter = new ArrayAdapter(this,

                android.R.layout.simple_list_item_1, countries);

 

        // устанавливаем для списка адаптер

        countriesList.setAdapter(adapter);

    }

}

Здесь вначале получаем по id элемент ListView и затем создаем для него адаптер.

Для создания адаптера использовался следующий конструктор ArrayAdapter<String>(this,android.R.layout.simple_list_item_1, countries), где

  • this : текущий объект activity

  • android.R.layout.simple_list_item_1 : файл разметки списка, который фреймворк представляет по умолчанию. Он находится в папке Android SDK по пути platforms/[android-номер_версии]/data/res/layout. Если нас не удовлетворяет стандартная разметка списка, мы можем создать свою и потом в коде изменить id на id нужной нам разметки

  • countries : массив данных. Здесь необязательно указывать именно массив, это может быть список ArrayList<T>.

В конце неоходимо установить для ListView адаптер с помощью метода setAdapter().

В итоге мы получим следующее отображение:

Лабораторная работа №12. Адаптеры и списки

bottom of page