2011-09-11 23 views
28

Estoy tratando de organizar mi código y mover funciones repetitivas a una sola clase. Esta línea de código funciona bien dentro de una clase que amplía la actividad:Cómo llamar a getWindow() fuera de una actividad en Android?

getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); 

Sin embargo, no funciona cuando intento de incluir en una clase externa.

¿Cómo puedo llamar a getWindow() desde otra clase para aplicarlo dentro de una actividad?

Respuesta

33

Pase una referencia de la actividad cuando crea la clase y cuando llama a métodos relevantes y úsela.

void someMethodThatUsesActivity(Activity myActivityReference) { 
    myActivityReference.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); 
} 
+0

Lo hizo. Muchas gracias. –

+1

@ khr2003 - me alegro de poder ayudar :) – MByD

+6

Esta no debería ser la respuesta aceptada, ya que puede causar una pérdida de memoria más adelante si no limpia todas las referencias creadas manualmente. Siempre debe usar el contexto administrado provisto por Android. Ver mi respuesta, en cambio. –

-10

Uso

getActivity().getWindow().requestFeature(Window.FEATURE_PROGRESS); 

Es más fácil será

27

Usted no podrá mantener las referencias en torno a como se sugiere en la respuesta aceptada. Esto funciona, pero puede causar pérdidas de memoria.

Use esto en lugar de su punto de vista:

((Activity) getContext()).getWindow()... 

tiene una referencia conseguido su actividad, en su opinión, que puede recuperar usando getContext(). Empléelo en Activity y usa cualquier método de la actividad, como getWindow().

+4

esto es antiguo, pero vale la pena señalar que hay dos situaciones en las que esto no funcionará. 1) cuando el contexto es el contexto de la aplicación (no ocurrirá dentro de una vista, pero es bueno saber si estás en una clase de utilidad de algún tipo). 2) ocasionalmente, el contexto de vista se resolverá en ContextThemeWrapper en lugar de una actividad. No he resuelto la causa de la última pero es algo a tener en cuenta, ya que provocará una excepción de lanzamiento de clase. –

+0

Ya no funciona necesariamente a partir de la biblioteca de soporte 23.3. getContext() en ImageView devuelve un TintContextWrapper sin posibilidad de recuperar el contexto base. – 0101100101

+0

@ 0101100101 Incorrecto. Aún puede obtener el contexto base al enviar contenido a ContextWrapper. – Maxr1998

4

Puede utilizar siguiente método para emitir contexto actual de la actividad:

/** 
* Get activity instance from desired context. 
*/ 
public static Activity getActivity(Context context) { 
    if (context == null) return null; 
    if (context instanceof Activity) return (Activity) context; 
    if (context instanceof ContextWrapper) return getActivity(((ContextWrapper)context).getBaseContext()); 
    return null; 
} 

entonces se puede obtener la ventana de la actividad.

Cuestiones relacionadas