50 votes

Comment appeler getWindow() en dehors d'une activité sous Android ?

J'essaie d'organiser mon code et de déplacer les fonctions répétitives vers une seule classe. Cette ligne de code fonctionne correctement dans une classe qui étend l'activité :

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

Cependant, cela ne fonctionne pas lorsque j'essaie de l'inclure dans une classe externe.

Comment appeler getWindow() à partir d'une autre classe pour l'appliquer dans une activité ?

51voto

Oliver Hausler Points 2900

Vous ne devez pas conserver de références comme suggéré dans la réponse acceptée. Cela fonctionne, mais peut provoquer des fuites de mémoire.

Utilisez ceci à la place de votre point de vue :

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

Vous avez une référence gérée à votre activité dans votre vue, que vous pouvez récupérer à l'aide de getContext(). Convertissez-le en Activity et utilisez n'importe quelle méthode de l'activité, telle que getWindow().

48voto

MByD Points 78505

Transmettez une référence de l'activité lorsque vous créez la classe et lors de l'appel des méthodes pertinentes et utilisez-la.

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

21voto

Hexise Points 605

Vous pouvez utiliser la méthode suivante pour convertir le contexte actuel en activité :

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

Ensuite, vous pouvez obtenir une fenêtre de l'activité.

1voto

jsaon chyeng Points 1

code kotlin :

 myView.rootView.findViewById<View>(android.R.id.content).context as Activity

-17voto

wwahyudi Points 7

Utilisation

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

ce sera plus facile

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X