可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
I am trying to organize my code and move repetitive functions to a single class. This line of code works fine inside a class that extends activity:
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
However it is not working when I try to include it into an external class.
How do I call getWindow() from another class to apply it inside an Activity?
回答1:
Pass a reference of the activity when you create the class, and when calling relevant methods and use it.
void someMethodThatUsesActivity(Activity myActivityReference) { myActivityReference.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); }
回答2:
You shall not keep references around as suggested in the accepted answer. This works, but may cause memory leaks.
Use this instead from your view:
((Activity) getContext()).getWindow()...
You have a managed reference to your activity in your view, which you can retrieve using getContext(). Cast it to Activity and use any methods from the activity, such as getWindow().
回答3:
You can use following method to cast current context to activity:
/** * 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; }
Then you can get window from the activity.
回答4:
Use
getActivity().getWindow().requestFeature(Window.FEATURE_PROGRESS);
It's will be easier