Страницы

Поиск по вопросам

вторник, 20 ноября 2018 г.

Метод inflate() в Android

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


Ответ

Вот отличная статья на англосаксонском: Understanding Android's LayoutInflater.inflate()
Краткая выжимка:
LayoutInflater.inflate(int resource, ViewGroup root, boolean attachToRoot) - 1 аргумент указание какой файл разметки загрузить. Второй - родительский элемент разметки, в который будет автоматически добавлена загружаемая разметка если 3 параметр true или откуда будут взяты LayoutParams для загружаемой вьюхи, если attachToRoot false Из п.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);
В некоторых случаях система сама добавляет загруженную вьюху в контейнер и ей не надо мешать. Примеры - загрузка разметки для фрагмента и для ячейки списка (ListView, RecyclerView, GridView etc). В этих случаях обязательно надо передавать false последним аргументом. Система сама определит в какой момент разметку надо будет добавить в родительский контейнер В некторых случаях нет смысла передавать второй аргумент, т.к. его как бы нет. Это случай кастомной разметки диалогов. В этом случае можно передать null вместо родительского элемента загружаемой разметки. В некоторых случаях используется тэг в качестве корневого в файле разметки. Такие вьюхи нельзя поместить в переменную, можно только сразу в разметку. Тут никак не обойтись без передачи true в качестве последнего параметра. Такое может пригодится если вы хотите иметь возможность, например, добавлять 2 кнопки, определённые в одном файле разметки в разные контенеры. Например в тот же LinearLayout но с разной ориентацией последнего.

Комментариев нет:

Отправить комментарий