2014-01-08 3 views
28

Существует способ, чтобы получить layoutInflater:Каков правильный способ получения макета надувных в Android?

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

и другой путь:

LayoutInflater inflater = LayoutInflater.from(context); 

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

LayoutInflater inflater = getLayoutInflater(); 

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

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

+3

не очень большая разница – Raghunandan

+1

искать эти методы на grepcode, чтобы вы могли понять различия между ними – Blackbelt

+1

Эстетически, 1-й один :) В противном случае все одинаково. – himanshurb

ответ

5

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

Как док говорит public abstract Object getSystemService (String name)

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

И для public static LayoutInflater from (Context context)

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

Вы можете проверить эту нить Is there any difference between getLayoutInflater() and .getSystemService(Context.LAYOUT_INFLATER_SERVICE)

4

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

16

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

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

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

 LayoutInflater inflater = getLayoutInflater(); 

Check this

Если вы откроете для 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(), нет никакой разницы.

+0

вы сделали y день, я искал последние пять дней, но не повезло с этой ошибкой, теперь ваше решение отлично работает @Shyam Deore –

2

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

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

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

Смежные вопросы