Задать вопрос
@Saymon_K

Андроид: LayoutInflater — зачем он нужен?

Добрый день!
Начал изучать Андроид и вот дошел до темы про LayoutInflater. Сколько я не искал разъяснений в Google Search и в книжках разных писателей, все никак не получилось понять: что это за штука? И почему бы не использовать вместо нее более короткий findViewById? Ведь они оба берут элемент (какое-либо View) из xml файла с целью работы в коде.
  • Вопрос задан
  • 12193 просмотра
Подписаться 2 Оценить Комментировать
Решения вопроса 1
Collosteam
@Collosteam
Android кодирую
Класс LayoutInflater содержит метод:
public View inflate(int resource, ViewGroup root, boolean attachToRoot) {
        if (DEBUG) System.out.println("INFLATING from resource: " + resource);
        XmlResourceParser parser = getContext().getResources().getLayout(resource);
        try {
            return inflate(parser, root, attachToRoot);
        } finally {
            parser.close();
        }
    }

Соответственно парсер парсит xml и преобразует в объект класса View;

Когда вы в Activity указываете setContentView(int id);
Вы передаете ссылку на xml. Внутри Activity находится экземпляр класса Window, он парсит ваш xml и получает объект класса View. Дальше при вызове в Activity - findViewById(int id), вы обращаетесь к экземпляру класса Window, в свою очередь он делегирует (передает вызов) экземпляру класса View.
А класс View содержит метод findViewById(int id), и уже он возвращает искомый объект, соответственно в обоих случаях механизм один и тот же, только LayoutInflater обычно используется для парсинга xml не являющихся layout Activity. Например при отрисовке Fragments и CustomView или при компоновке Activity из Java.

Посмотрите исходники SDK, там очень подробно все описано.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@bimeg
findViewById не работает с xml. Он работает с деревом Viewшек. А вот чтобы это дерево сделать из xml как раз нужен LayoutInflater.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
Brief Москва
от 150 000 до 210 000 ₽
СМК-РК Москва
от 200 000 до 250 000 ₽
Crystal Service Integration Санкт-Петербург
от 200 000 ₽