Яка роль адаптерів в Android?


123

Хочу знати, коли , де і як використовуються адаптери в контексті Android.

Інформація з документації для розробників Android була недостатньою для мене, і я хотів би отримати більш детальний аналіз.

Відповіді:


29

Припустимо, ви хочете відобразити список у додатку для Android. Для цього ви будете використовувати ListViewнадані Android. ListViews насправді самі не містять ніяких даних. Це просто елемент інтерфейсу без даних у ньому. Ви можете заповнити свої пристрої ListViewза допомогою адаптера Android.

Adapterце інтерфейс, реалізація якого надає дані та контролює відображення цих даних. ListViews власні адаптери, які повністю керують ListViewдисплеєм. Тому адаптери контролюють вміст, який відображається у списку, а також спосіб його відображення.

AdapterІнтерфейс включає в себе різні методи для передачі даних до ListView. Ви можете створити власний адаптер з нуля, реалізуючи BaseAdapter.

public class ArrayAdapter<T> extends BaseAdapter implements Filterable {

// One of the constructors
public ArrayAdapter(Context context, int resource, int textViewResourceId, T[] objects) {
    init(context, resource, textViewResourceId, Arrays.asList(objects));
}

void manyMoreMethods(){} 

}

Давайте визначимо адаптер:

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
   android.R.layout.simple_list_item_1, android.R.id.text1, values);
  • Перший параметр: контекст
  • Другий параметр: Макет для рядка
  • Третій параметр: ідентифікатор того, TextViewдо якого записуються дані
  • Четвертий параметр: масив даних

45

Добре адаптери в Android - це в основному міст між компонентами інтерфейсу та джерелом даних, які заповнюють дані в компонент інтерфейсу

Наприклад, списки (компонент інтерфейсу користувача) заповнюються за допомогою адаптера списку з масиву джерел даних.


21
Це та сама інформація, яку я можу отримати з документації. Але я хочу детального пояснення
Робін,

25

Я хотів би поділитися своїм розумінням.

Це інтерфейс між джерелом даних та вашим макетом (швидше за все ListView).

Аналогія

Візьмемо для прикладу мобільний зарядний пристрій, а точніше USB-кабель. Провід можна розглядати як адаптер, тоді як джерело даних та макет можна розуміти як розетка (точка підключення) та порт USB (точка зарядки) відповідно.

У випадку мобільної зарядки джерело живлення може бути різним, наприклад, заряджання від електроживлення, розетки або ноутбука. Те саме стосується адаптерів, які використовуються в Android. Джерело даних може бути змінено залежно від вимоги програми.

Коротше кажучи, адаптер в Android переносить дані з джерела (наприклад ArrayList<>) і доставляє їх у макет (.xml файл).


2
Найкращий приклад поки що: D Гарна робота!
Дакш Гаргас

8

Адаптери в Android - це міст між поданням адаптера (наприклад ListView) та базовими даними для цього подання. Уявіть, яким би був світ без адаптерів!

Приклади

  • Вид, який відображає елементи у списку вертикально прокрутки. Елементи походять із ListAdapterасоційованого з цим поданням.

  • ListAdapterВизначає макет для окремих рядків списку і надають дані ListViewпо setAdapter()методі ListView.

  • Android пропонує декілька стандартних адаптерів; найважливішими є ArrayAdapterі CursorAdapter.

  • ArrayAdapter може обробляти дані на основі масивів або списків.

  • SimpleCursorAdapter може обробляти дані, пов'язані з базою даних.

4

В основному адаптери використовуються для доставки вмісту. Один адаптер, який ви, мабуть, маєте в кожній програмі - це CursorAdapter, який дозволяє вам доставляти вміст, заданий курсором, із запиту бази даних. У ListView майже завжди є якийсь адаптер.


7
Це та сама інформація, яку я можу отримати з документації. Але я хочу детального пояснення
Робін,

@Robin: чому ти не відзначаєш 10-річну річницю свого питання, "прийнявши" одну з відповідей. Особисто: 1) Я вважаю ваше запитання цінним (саме так я і завершився тут), 2) Я вважаю, що багато з цих відповідей є корисними (включаючи цю) ... і 3) Я не маю поняття, що ви маєте на увазі під " більш детальне пояснення ". Можливо, це тому, що мене більше цікавить "чому" (як добре пояснено вище); Мене більше цікавить "ліс" (на зразок відповіді WarrenFaith), ніж "детальні дерева" (які МОЖНА отримати з документації). Будь ласка, підтвердіть і прийміть :)
FoggyDay

4

Адаптер діє як міст між даними AdapterViewта основними даними для цього представлення даних. Адаптер забезпечує доступ до елементів даних і відповідає за створення представлення для кожного елемента в наборі даних.

Адаптери - це розумний спосіб з'єднати Viewджерело даних. Як правило, ваш погляд має бути a, ListViewа дані надходять у формі Cursorабо Array. Тож адаптери поставляються як підкласи CursorAdapterабо ArrayAdapter.


2

Адаптер керує моделлю даних та пристосовує їх до окремих рядків у вікні списку. Це розширює BaseAdapterклас.

Кожен рядок у поданні списку складається з макета, який може бути таким же складним, як вам завгодно. Типовий рядок у списку списку має зображення зліва та два рядки тексту посередині.


0

Адаптер просто використовується для досягнення концепції перегляду списку. Не тільки для відображення списку даних, але і для деяких спеціальних подань. Припустимо, клієнт хоче скористатися списком, який містить більше кількості перегляду тексту (будь-який інший вигляд), тому нам доведеться використовувати перегляд адаптера в Android.


0

Тут вже дано кілька відповідей, але я хочу дати іншу відповідь.

Адаптер означає, що ви можете, що його постачальник міст .

Адаптери - це зв'язок між набором даних та AdapterView, який відображає дані.


0

Зрештою, адаптери дуже корисні, щоб зробити звіт. Якщо ви хочете показати звіт про деяку інформацію, можна скористатися цим інструментом для відображення даних у поданому вигляді.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.