View.inflate vs LayoutInflater

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

Solutions Collecting From Web of "View.inflate vs LayoutInflater"

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

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

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

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

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

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

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

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

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