Как вызвать getWindow() вне Activity на Android?
Я пытаюсь организовать свой код и перемещать повторяющиеся функции в один класс.
Эта строка кода отлично работает внутри класса, который расширяет активность:
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
Однако он не работает, когда я пытаюсь включить его во внешний класс.
Как мне вызвать getWindow() из другого класса, чтобы применить его внутри Activity?
Ответы
Ответ 1
Передайте ссылку на активность при создании класса и при вызове соответствующих методов и используйте его.
void someMethodThatUsesActivity(Activity myActivityReference) {
myActivityReference.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
}
Ответ 2
Вы не должны хранить ссылки, как это предлагается в принятом ответе. Это работает, но может вызвать утечку памяти.
Используйте это вместо вашего представления:
((Activity) getContext()).getWindow()...
У вас есть управляемая ссылка на вашу активность в вашем представлении, которую вы можете получить с помощью getContext(). Передайте его активности и используйте любые методы из этой операции, такие как getWindow().
Ответ 3
Вы можете использовать следующий метод для передачи текущего контекста активности:
/**
* 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;
}
Затем вы можете получить окно из активности.
Ответ 4
Используйте
getActivity().getWindow().requestFeature(Window.FEATURE_PROGRESS);
Будет легче