Llame a GetLayoutInflater () en lugares no en actividad
-
25-10-2019 - |
Pregunta
¿Qué es necesario importar o cómo puedo llamar al influencia del diseño en lugares distintos de la actividad?
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();
}
Puedo llamar getLayoutInflater
Solo en la actividad, ¿es eso una restricción? ¿Qué pasa si quiero crear un diálogo personalizado y quiero inflar la vista, o qué pasa si quiero tener un mensaje de tostada con una vista personalizada que se muestra desde un servicio, solo tengo el contexto del servicio no tengo ninguna actividad? Pero quiero mostrar un mensaje personalizado.
Necesito el influjo en lugares del código que no esté en la clase de actividad.
Cómo puedo hacer esto ?
Solución
Puede usar estas actividades externas: todo lo que necesita es proporcionar un Context
:
LayoutInflater inflater = (LayoutInflater) context.getSystemService( Context.LAYOUT_INFLATER_SERVICE );
Luego, para recuperar sus diferentes widgets, infla un diseño:
View view = inflater.inflate( R.layout.myNewInflatedLayout, null );
Button myButton = (Button) view.findViewById( R.id.myButton );
Editar a partir de julio de 2014
Davide's responder Sobre cómo conseguir el LayoutInflater
en realidad es más correcto que el mío (aunque todavía es válido).
Otros consejos
O ...
LayoutInflater inflater = LayoutInflater.from(context);
o
View.inflate(context, layout, parent)
Usando el objeto de contexto, puede obtener LayoutInflater desde el siguiente código
LayoutInflater inflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
LayoutInflater inflater = (LayoutInflater) context.getSystemService( Context.LAYOUT_INFLATER_SERVICE );
¡Usa esto en su lugar!
LayoutInflater.from(context).inflate(R.layout.row_payment_gateway_item, null);