Позвоните в getLayoutInflater() в местах, где нет активности
Что нужно импортировать или как я могу называть раскладку макета в местах, отличных от активности?
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 с настраиваемым представлением, которое отображается из службы, у меня есть только контекст из службы, у меня нет активности но я хочу показать пользовательское сообщение.
Мне нужен раздув в местах в коде, который не находится в классе активности.
Как я могу это сделать?
Ответы
Ответ 1
Вы можете использовать это внешнее действие - все, что вам нужно, это предоставить 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 );
EDIT с июля 2014 года
Davide answer о том, как получить LayoutInflater
, на самом деле более корректно, чем моя (что еще актуально).
Ответ 2
Или...
LayoutInflater inflater = LayoutInflater.from(context);
Ответ 3
или
View.inflate(context, layout, parent)
Ответ 4
Используя контекстный объект, вы можете получить LayoutInflater из следующего кода
LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
Ответ 5
LayoutInflater inflater = (LayoutInflater) context.getSystemService( Context.LAYOUT_INFLATER_SERVICE );
Используйте это вместо!
Ответ 6
LayoutInflater.from(context).inflate(R.layout.row_payment_gateway_item, null);