Страницы

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

воскресенье, 15 декабря 2019 г.

Метод inflate() в Android

#java #android #android_sdk #android_layout


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


Ответы

Ответ 1



Вот отличная статья на англосаксонском: 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 но с разной ориентацией последнего.

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

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