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

Каков правильный способ получить раздув макета в Android?

Есть способ получить layoutInflater:

LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);

а другой способ:

LayoutInflater inflater = LayoutInflater.from(context);

третий (когда я нахожусь в Activity):

LayoutInflater inflater = getLayoutInflater();

Так в чем же разница между ними?

Обратите внимание, что когда я отправил третий надувной элемент в мой адаптер, мое приложение работало. Но когда я отправил контекст и создал надуватель через второй способ, он не сделал этого!

4b9b3361

Ответ 1

Между ними нет большой разницы.

Как сообщает doc public abstract Object getSystemService (имя строки)

A LayoutInflater для раздувания ресурсов макета в этом контексте.

И для public static LayoutInflater из контекста контекста

Получает LayoutInflater из заданного контекста.

Вы можете проверить этот поток Есть ли разница между getLayoutInflater() и .getSystemService(Context.LAYOUT_INFLATER_SERVICE)

Ответ 2

использовать вне вашей деятельности

    LayoutInflater inflater = (LayoutInflater) context.getSystemService(
        Context.LAYOUT_INFLATER_SERVICE );

В рамках вашей деятельности

     LayoutInflater inflater = getLayoutInflater();

Проверьте это

Если вы откроете источник Android, вы увидите, что метод LayoutInflator.from выглядит так:

    /**
     * Obtains the LayoutInflater from the given context.
     */
    public static LayoutInflater from(Context context) {
        LayoutInflater LayoutInflater =
                (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        if (LayoutInflater == null) {
            throw new AssertionError("LayoutInflater not found.");
        }
        return LayoutInflater;
    }

и нет разницы

Пока активность или окно, вызывающее getLayoutInflater(), имеет тот же Контекст, который вызовет getSystemService(), нет разницы.

Ответ 3

Единственное различие - это контекст, который вы используете. Если контекст, который вы используете с LayoutInflater.fromContext() или context.getSystemService(...), фактически является активностью, он должен быть эквивалентен Activity.getLayoutInflater(). Если это объект приложения, у вас могут возникнуть проблемы с раздуванием представлений, содержащих фрагменты, IIRC.

Ответ 4

На самом деле, я думаю, что метод getLayoutInflater() - Метод активности - метод удобства.

Помните, что Activity подклассы Context, поэтому все методы, доступные в Context, также доступны в классе Activity.

Внутри будет вызов LayoutInflater.fromContext() или context.getSystemService(), поэтому я должен придерживаться context.getSystemService, чтобы избежать ненужного вызова метода, а также уточнить, что я делаю вызов системной службе.