Подтвердить что ты не робот

View.inflate vs LayoutInflater

В чем основное отличие использования LayoutInflater и статического метода View.inflate()? Существуют ли какие-либо недостатки в использовании любого из них или, возможно, они предназначены для разных целей?

4b9b3361

Ответ 1

Если посмотреть на источник View.inflate(), мы увидим следующее:

public static View inflate(Context context, int resource, ViewGroup root) {
        LayoutInflater factory = LayoutInflater.from(context);
        return factory.inflate(resource, root);
}

Итак, внутренне метод inflate() класса View использует LayoutInflater, что заставляет меня не допускать разницы.

Ответ 2

View.inflate() внутренне вызывает LayoutInflator.inflate(resource, root), который в свою очередь вызывает LayoutInflator.inflate(resource, root, root != null). Третий параметр - booleanAttachToRoot, который docs описывают как:

Следует ли привязать завышенную иерархию к корневому параметру? Если false, root используется только для создания правильного подкласса LayoutParams для корневого представления в XML.

Другими словами, с View.inflate() вы не можете сказать инфлятору не добавлять новое представление к исходной корневой группе ViewGroup.

Ответ 3

Я просто получаю от этого проблему. И вот что я нахожу.

View.inflate использовать LayoutInflator.inflate(id, Viewparent). Он игнорирует родительский layoutparam, если параметр Viewparent paramater равен null.

Но. Inflator.inflate имеет другой api inflate (id, View parent, boolean attach). Этот метод полезен, когда вам нужно выполнить инициализацию этого представления с помощью родительского шаблона компоновки