Какая польза от LayoutInflater
Android?
android
layout-inflater
android-inflate
user386430
источник
источник
Ответы:
Когда вы используете пользовательское представление в a,
ListView
вы должны определить макет строки. Вы создаете XML, в который помещаете виджеты Android, а затем в коде адаптера вы должны сделать что-то вроде этого:Подробнее читайте в официальной документации .
источник
View view = convertView; if (view == null) { view = mInflater.... }
LayoutInflater
такое, хотя и объясняет, где его использовать. Ответ 1 вниз лучше.Класс LayoutInflater используется для создания экземпляров содержимого XML-файлов макета в соответствующих им объектах View.
Другими словами, он принимает файл XML в качестве входных данных и создает из него объекты View.
источник
single_list_item.xml
файл для каждой строкиListView
. Является ли использование этого файла XML чем-то вроде инфлятора?Что делает
LayoutInflator
?Когда я впервые начал программировать на Android, я был очень смущен
LayoutInflater
иfindViewById
. Иногда мы использовали одно, а иногда и другое.LayoutInflater
используется для создания новогоView
(илиLayout
) объекта из одного из ваших XML-макетов.findViewById
просто дает вам ссылку на вид, который уже был создан. Можно подумать , что вы еще не создали никакого мнения пока нет, но всякий раз , когда вы звонитеsetContentView
вonCreate
, расположение своей деятельности наряду с ее подвидами получает завышено (созданное) за кулисами.Так что, если представление уже существует, используйте
findViewById
. Если нет, то создайте его с помощьюLayoutInflater
.пример
Вот мини-проект, который я сделал, который показывает
LayoutInflater
иfindViewById
в действии. Без специального кода макет выглядит следующим образом.Синий квадрат - это пользовательский макет, вставленный в основной макет с помощью
include
(подробнее см. Здесь ). Он был раздут автоматически, потому что он является частью представления содержимого. Как видите, в коде нет ничего особенного.Теперь давайте надуем (создадим) еще одну копию нашего пользовательского макета и добавим ее.
Чтобы надуть новый макет представления, все, что я сделал, это сказал инфлятору имя моего xml-файла (
my_layout
), родительский макет, к которому я хочу добавить его (mainLayout
), и что я на самом деле пока не хочу его добавлять (false
) , (Я также мог бы установить для родителя значениеnull
, но тогда параметры макета корневого представления моей пользовательской компоновки будут игнорироваться.)Здесь это снова в контексте.
Обратите внимание, как
findViewById
это используется только после того, как макет уже накачан.Дополнительный код
Вот XML для примера выше.
activity_main.xml
my_layout.xml
Когда вам нужен LayoutInflater
RecyclerView
. (См. ЭтиRecyclerView
примеры для списка или сетки .) Вы должны надуть новый макет для каждого видимого элемента в списке или сетке.источник
myLayout
это представление, хотя я мог бы раздувать его как RelativeLayout (см. My_layout.xml). После того, как он надут, я добавляю его как подпредставление родителя LinearLayout (то естьmainLayout
).LayoutInflater.inflate () предоставляет средства для преобразования файла res / layout / *. Xml, определяющего представление, в фактический объект View, используемый в исходном коде вашего приложения.
Основные два шага: получить инфлятор, а затем накачать ресурс
Как вы получаете инфлятор?
Как вы получаете представление, предполагая, что XML-файл "list_item.xml"?
источник
Вот еще один пример, похожий на предыдущий, но расширенный для дальнейшей демонстрации параметров раздувания и динамического поведения, которые он может предоставить.
Предположим, что ваш макет строки ListView может иметь переменное количество TextViews. Итак, сначала вы надуваете базовый элемент View (как в предыдущем примере), а затем динамически зацикливаетесь, добавляя TextViews во время выполнения. Использование android: layout_weight дополнительно выравнивает все идеально.
Вот ресурсы Layouts:
list_layout.xml
schedule_layout.xml
Переопределить метод getView в расширении класса BaseAdapter
Обратите внимание на различные вызовы метода inflate
источник
Этот класс используется для создания экземпляра XML-файла макета в соответствующих
View
объектах. Он никогда не используется напрямую - используйтеgetLayoutInflater()
илиgetSystemService(String)
для извлечения стандартногоLayoutInflater
экземпляра, который уже подключен к текущему контексту и правильно настроен для устройства, на котором вы работаете. Например:Ссылка: http://developer.android.com/reference/android/view/LayoutInflater.html
источник
Раздувание означает чтение XML-файла, который описывает макет (или элемент графического интерфейса пользователя), и создание фактических объектов, которые ему соответствуют, и, таким образом, делают объект видимым в приложении Android.
Этот файл может быть сохранен как date_time_dialog.xml :
Этот файл может быть сохранен как date_time_picker.xml :
MainActivity
Класс сохраняется как MainActivity.java :источник
Что делает инфлятор
Он принимает XML-макет в качестве ввода (скажем) и преобразует его в объект View.
Зачем нужен
Давайте подумаем о сценарии, в котором нам нужно создать собственное представление списка. Теперь каждый ряд должен быть нестандартным. Но как мы можем это сделать. Невозможно назначить макет xml строке списка. Итак, мы создаем объект View. Таким образом, мы можем получить доступ к элементам в нем (textview, imageview и т. Д.), А также назначить объект как строку списка.
Таким образом, всякий раз, когда нам нужно где-то назначить объект типа представления и у нас есть свой собственный дизайн XML, мы просто конвертируем его в объект с помощью inflater и используем его.
источник
LayoutInflater - это класс, используемый для создания экземпляра XML-файла макета в соответствующих объектах представления, которые можно использовать в программах Java. Проще говоря, есть два способа создания пользовательского интерфейса в Android. Один из них статический, а другой динамический или программный. Предположим, у нас есть простой макет main.xml, имеющий один
textview
и одинedittext
следующим образом.Мы можем отобразить этот макет в статическом виде,
Динамический способ создания представления означает, что представление не упоминается в нашем main.xml, но мы хотим показать это во время выполнения. Например, у нас есть другой XML в папке макета, как footer.xml
Мы хотим показать это текстовое поле во время выполнения в нашем основном интерфейсе. Так что здесь мы будем раздувать text.xml. Смотри как:
Здесь я использовал getSystemService (String) для получения экземпляра LayoutInflater. Я также могу использовать getLayoutInflator () для раздувания вместо использования getSystemService (String), как показано ниже:
источник
Вот пример для получения ссылки на корневой вид макета, его раздувания и использования с setContentView (View view)
источник
Layout Inflater - это класс, который читает описание внешнего вида xml и преобразует их в объекты View на основе Java.
источник
мой список настройки надеюсь, что это иллюстрирует концепцию
источник
LayoutInflater является фундаментальным компонентом в Android. Вы должны использовать его все время, чтобы превратить XML-файлы в иерархии представлений.
источник
LayoutInflater создает объекты View на основе макетов, определенных в XML. Существует несколько различных способов использования LayoutInflater, в том числе создание пользовательских представлений, раздувание представлений фрагментов в представлениях операций, создание диалоговых окон или просто раздувание представления макета в файле действий.
Есть много заблуждений о том, как работает процесс инфляции. Я думаю, что это происходит из-за плохой документации для метода inflate (). Если вы хотите узнать больше о методе inflate (), я написал об этом в блоге:
https://www.bignerdranch.com/blog/understanding-androids-layoutinflater-inflate/
источник
На самом деле Infalter - это своего рода преобразование в данные, представления, экземпляры, в видимое представление пользовательского интерфейса ... ... которое программно использует подачу данных из адаптеров и т. Д. затем интегрировать его с определенным вами xml, что говорит о том, как данные должны быть представлены в пользовательском интерфейсе
источник