Метод inflate() в Android

356
27 марта 2017, 07:41

Может кто доходчиво объяснить суть параметров метода inflater.inflate(int resource, ViewGroup root, boolean attachToRoot)? С первым вроде понятно, он по сути, преобразуется из XML в полноценный объект. По второму и третьему как то сухо написано, что один - это родительский элемент (не совсем понятно что за родительский элемент), а второй - отвечает за присоединение этого элемента к родителю или что такое.

Answer 1

Вот отличная статья на англосаксонском: Understanding Android's LayoutInflater.inflate()

Краткая выжимка:

  1. LayoutInflater.inflate(int resource, ViewGroup root, boolean attachToRoot) - 1 аргумент указание какой файл разметки загрузить. Второй - родительский элемент разметки, в который будет автоматически добавлена загружаемая разметка если 3 параметр true или откуда будут взяты LayoutParams для загружаемой вьюхи, если attachToRoot false

  2. Из п.1 следует, что следующие строки делают одно и тоже:

//загружаем файл разметки и вручную добавляем его в контейнер
View v = inflater.inflate(R.layout.custom_button, mLinearLayout, false);
mLinearLayout.addView(v);
//загружаем файл разметки и автоматически добавляем его в контейнер
inflater.inflate(R.layout.custom_button, mLinearLayout, true);
//загружаем файл разметки и автоматически добавляем его в контейнер
inflater.inflate(R.layout.custom_button, mLinearLayout);
  1. В некоторых случаях система сама добавляет загруженную вьюху в контейнер и ей не надо мешать. Примеры - загрузка разметки для фрагмента и для ячейки списка (ListView, RecyclerView, GridView etc). В этих случаях обязательно надо передавать false последним аргументом. Система сама определит в какой момент разметку надо будет добавить в родительский контейнер

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

  3. В некоторых случаях используется тэг <merge> в качестве корневого в файле разметки. Такие вьюхи нельзя поместить в переменную, можно только сразу в разметку. Тут никак не обойтись без передачи true в качестве последнего параметра. Такое может пригодится если вы хотите иметь возможность, например, добавлять 2 кнопки, определённые в одном файле разметки в разные контенеры. Например в тот же LinearLayout но с разной ориентацией последнего.

READ ALSO
Как получить java object в thymeleaf через authentication

Как получить java object в thymeleaf через authentication

Я могу получить имя текущего пользователя <span sec:authentication="name">UserName</span>, а как получить полноценный объект что бы дергать у него любые...

436
Проблема с GridLayout

Проблема с GridLayout

Имеются кнопкиПытаюсь добиться того, чтобы они отображались по середине

310
Восстановить путь. Задач о рюкзаке с ограниченным количеством

Восстановить путь. Задач о рюкзаке с ограниченным количеством

Здравствуйте, не подскажите как можно восстановить путь, в задаче о рюкзаке с ограниченным количество предметов, был бы весьма благодаренСпасибо

413