it-swarm.it

Come chiamare getWindow () al di fuori di un'attività in Android?

Sto cercando di organizzare il mio codice e spostare le funzioni ripetitive in una singola classe. Questa riga di codice funziona perfettamente all'interno di una classe che estende l'attività:

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

Tuttavia non funziona quando provo a includerlo in una classe esterna.

Come posso chiamare getWindow () da un'altra classe per applicarlo all'interno di un'attività?

39
Kalimah Apps

Passa un riferimento all'attività quando crei la classe e quando chiami i metodi pertinenti e la usi.

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

Non tenere i riferimenti come suggerito nella risposta accettata. Funziona, ma può causare perdite di memoria.

Usa questo invece dalla tua vista:

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

Hai un riferimento gestito alla tua attività nella tua vista, che puoi recuperare usando getContext (). Trasmettilo su Activity e usa tutti i metodi dell'attività, come getWindow ().

42
Oliver Hausler

È possibile utilizzare il seguente metodo per trasmettere il contesto corrente all'attività:

/**
 * 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;
}

Quindi puoi ottenere una finestra dall'attività.

10
Hexise