Вызов getLayoutInflater () в местах, где нет активности - PullRequest
168 голосов
/ 18 октября 2011

Что нужно импортировать или как я могу вызвать инфлятор в Layout в местах, отличных от активности?

public static void method(Context context){
    //this doesn't work the getLayoutInflater method could not be found
    LayoutInflater inflater = getLayoutInflater();
    // this also doesn't work 
    LayoutInflater inflater = context.getLayoutInflater();
}

Я могу звонить getLayoutInflater только в активности, это ограничение?Что делать, если я хочу создать пользовательский диалог и хочу его раздувать, или что, если я хочу получить сообщение Toast с настраиваемым представлением, отображаемым из службы, у меня есть только контекст из службы, у меня нет активностино я хочу показать пользовательское сообщение.

Мне нужен инфлятор в местах кода, которых нет в классе активности.

Как я могу это сделать?

Ответы [ 5 ]

367 голосов
/ 18 октября 2011

Вы можете использовать это вне деятельности - все, что вам нужно, это предоставить Context:

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

Затем, чтобы получить разные виджеты, вы раздуваете макет:

View view = inflater.inflate( R.layout.myNewInflatedLayout, null );
Button myButton = (Button) view.findViewById( R.id.myButton );

РЕДАКТИРОВАТЬ на июль 2014 года

Ответ Дэвида о том, как получить LayoutInflater, на самом деле более правильный, чем мой (хотя он все еще действителен).

239 голосов
/ 22 сентября 2013

Или ...

LayoutInflater inflater = LayoutInflater.from(context);
10 голосов
/ 11 июня 2014

или

View.inflate(context, layout, parent)

9 голосов
/ 18 октября 2011

Используя объект контекста, вы можете получить LayoutInflater из следующего кода

LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
0 голосов
/ 28 марта 2019
LayoutInflater.from(context).inflate(R.layout.row_payment_gateway_item, null);
...