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


123

Я хочу знать, когда , где и как используются адаптеры в контексте Android.

Информации из документации разработчика Android мне было недостаточно, и хотелось бы получить более подробный анализ.

Ответы:


29

Предположим, вы хотите отобразить список в своем приложении для Android. Для этого вы будете использовать ListViewпредоставленный Android. ListViews на самом деле не содержат никаких данных. Это просто элемент пользовательского интерфейса без данных. Вы можете заполнить свои ListViews с помощью адаптера Android.

Adapter- это интерфейс, реализации которого предоставляют данные и управляют отображением этих данных. ListViewсобственные адаптеры, которые полностью управляют 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);
  • Первый параметр: Контекст
  • Второй параметр: макет строки
  • Третий параметр: ID того, в TextViewкоторый записываются данные
  • Четвертый параметр: массив данных.

45

Адаптеры скважин в Android по сути являются мостом между компонентами пользовательского интерфейса и источником данных, которые заполняют данные в компонент пользовательского интерфейса.

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


21
Это та же информация, которую я могу получить из документации. Но мне нужно подробное объяснение
Робин

25

Хочу поделиться своим пониманием.

Это интерфейс между источником данных и вашим макетом (скорее всего, ListView).

Аналогия

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

В случае мобильной зарядки источник питания может быть другим, например, зарядка от блока питания, розетки или ноутбука. То же самое и с адаптерами, используемыми в Android. Источник данных может быть изменен в зависимости от требований приложения.

Короче говоря, адаптер в Android передает данные из источника (например ArrayList<>) и доставляет их в макет (файл .xml).


2
Лучший пример на данный момент: D Хорошая работа!
Daksh Gargas

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источнику данных. Как правило, ваше представление будет иметь вид, ListViewа данные будут иметь форму Cursorили Array. Таким образом, адаптеры являются подклассами CursorAdapterили ArrayAdapter.


2

Адаптер управляет моделью данных и адаптирует ее к отдельным строкам в представлении списка. Это расширяет BaseAdapterкласс.

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


0

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


0

Уже даны множественные ответы, но я хочу дать другой ответ.

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

Адаптеры - это связь между набором данных и AdapterView, который отображает данные.


0

В конце концов, адаптеры очень полезны для составления отчета. Если кто-то хочет показать отчет с некоторой информацией, можно использовать этот инструмент, чтобы показать данные в представлении.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.