Подтвердить что ты не робот

Как вызвать getWindow() вне Activity на Android?

Я пытаюсь организовать свой код и перемещать повторяющиеся функции в один класс. Эта строка кода отлично работает внутри класса, который расширяет активность:

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

Однако он не работает, когда я пытаюсь включить его во внешний класс.

Как мне вызвать getWindow() из другого класса, чтобы применить его внутри Activity?

4b9b3361

Ответ 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);

Будет легче