В Android часто використовуються адаптери. Якщо говорити в загальних рисах, то адаптери спрощують зв'язування даних з елементом управління. Адаптери використовуються при роботі з віджетами, які доповнюють android.widget.AdapterView: ListView, ExpandableListView, GridView, Spinner, Gallery, а також в активності ListActivity та ін. Сам AdapterView доповнює android.widget.ViewGroup.

Отже, у нас є набір об'єктів і є компонент View. Призначення адаптера полягає в тому, щоб надавати дочірні види для контейнера. Адаптер бере дані та метадані певного контейнера і будує кожен дочірній вигляд. Наприклад, ми формуємо пункти списку (масив рядків) і передаємо його списком ListView.

Ви що-небудь зрозуміли? Спробуємо пояснити по-іншому. Що таке взагалі адаптер? Це перехідник між двома якимись предметами. Припустимо, між питною водою і людиною потрібний адаптер у вигляді крана.

Однак повернемося до Android. У додатках дуже часто використовується список на основі ListView. Сам список складається з безлічі елементів TextView, які йдуть один за одним. Але їх кількість буде залежати від того, що ми хочемо відобразити. Якщо нам потрібні дні тижня, то достатньо семи елементів, якщо місяці, то вже дванадцять, ну а якщо нам потрібні телефони всіх студентів ВУЗу, то рахунок піде на сотні. Коротше кажучи, нам потрібно скласти дані, наприклад, у вигляді масиву і згодувати його списку. Адаптер цим і займається. Він бере по порядку надані дані і розташовує їх в списку по порядку. При цьому адаптер на льоту створює потрібні компоненти TextView і поміщає в нього приготований текст. Дані можуть перебувати не тільки в масиві, але і в базі даних. Для такого випадку використовується інший адаптер. А також ви можете придумати свій адаптер. Існують уже готові адаптери на найпоширеніші випадки і їх призначення можна визначити по іменах. Наприклад, ArrayAdapter використовує масив, а CursorAdapter працює з об'єктом Cursor, що використовується в базах даних.

Готові адаптери

Всі адаптери, що містяться в Android, доповнюють базовий адаптер BaseAdapter. Ось список готових адаптерів:

ArrayAdapter<T> - призначений для роботи з ListView. Дані представлені у вигляді масиву, які розміщуються в окремих елементах TextView;
ListAdapter - адаптер між ListView і даними. Строго кажучи, це клас-інтерфейс, який можна використовувати і в ArrayAdapter, і в SimpleAdapter і т. д.;
SpinnerAdapter - адаптер для зв'язування даних з елементом Spinner. Це теж інтерфейс, як ListAdapter і працює за схожим принципом;
SimpleAdapter - адаптер, що дозволяє заповнити даними список більш складної структури, наприклад, два тексти в одному рядку списку;
SimpleCursorAdapter - доповнює ResourceCursorAdapter і створює компоненти TextView/ImageView з стовпчиків, що містяться у курсорі. Компоненти визначаються в ресурсах;
CursorAdapter - призначений для роботи з ListView, надає дані для списку через вказівник, який повинен мати колонку з ім'ям "_id";
ResourceCursorAdapter - цей адаптер доповнює CursorAdapter і може створювати види ресурсів;
HeaderViewListAdapter - розширений варіант ListAdapter, коли ListView має заголовки.;
WrapperListAdapter - ще один адаптер для списків.

BaseAdapter

Стандартні адаптери не завжди покривають потреби програміста. Якщо вам потрібен свій власний адаптер, то в Android є абстрактний клас BaseAdapter, який можна розширити. Власний адаптер необхідний у тих випадках, коли потрібне спеціальне управління даними або додатковий контроль над відображенням дочірніх уявлень. Крім того, ви можете передбачити у своєму адаптері елементи кешування для підвищення продуктивності роботи.

У BaseAdapter є кілька методів, які слід перевизначити. Наприклад, метод getCount() дозволяє дізнатися кількість виведених об'єктів.

Інший важливий метод адаптера — getView(), який відповідає за створення окремих елементів списку. Він викликається для кожного елементу списку, щоб визначити, які дані потрібно відобразити. Метод getView() містить параметр convertView, який дозволяє використовувати заново вже існуючий елемент списку, який не відображається, оскільки користувач перегорнув його з видимої частини дисплея. Якщо convertView не порожній, він може бути використаний заново, щоб не навантажувати розмітку списку. Подібний підхід сприяє збільшенню продуктивності.

Метод getView() повертає View, який фактично є шаблоном (ViewGroup) і містить у собі інші компоненти, наприклад, ImageView або TextView.

Вікторія Пряжнікова


2016-06-05 • Просмотров [ 43 ]