2011-09-11 9 views
28

मैं अपना कोड व्यवस्थित करने और दोहराव वाले कार्यों को एक वर्ग में स्थानांतरित करने की कोशिश कर रहा हूं। कोड की यह पंक्ति एक वर्ग है कि गतिविधि फैली अंदर ठीक काम करता है:Android में किसी गतिविधि के बाहर getWindow() को कैसे कॉल करें?

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

लेकिन यह काम नहीं कर रहा है जब मैं यह एक बाहरी वर्ग में शामिल करने के लिए प्रयास करें।

मैं किसी गतिविधि के अंदर इसे लागू करने के लिए getWindow() को किसी अन्य वर्ग से कैसे कॉल करूं?

उत्तर

33

कक्षा बनाते समय गतिविधि का संदर्भ पास करें, और प्रासंगिक विधियों को कॉल करते समय और इसका उपयोग करें।

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

यह किया। आपका बहुत बहुत धन्यवाद। –

+1

@ khr2003 - खुशी है कि मैं मदद कर सकता हूं :) – MByD

+6

यह स्वीकार्य उत्तर नहीं होना चाहिए, क्योंकि यदि आप सभी मैन्युअल रूप से बनाए गए संदर्भों को साफ़ नहीं करते हैं तो यह बाद में स्मृति रिसाव का कारण बन सकता है। आपको हमेशा एंड्रॉइड द्वारा प्रदान किए गए प्रबंधित संदर्भ का उपयोग करना चाहिए। इसके बजाय मेरा जवाब देखें। –

-10

उपयोग

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

यह होगा आसान

27

आप संदर्भ के आसपास के रूप में स्वीकार जवाब में सुझाव नहीं रखना चाहिए। यह काम करता है, लेकिन स्मृति रिसाव का कारण बन सकता है।

बजाय अपने दृश्य से यह प्रयोग करें:

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

आप अपने देखने के लिए, में जो आप getContext का उपयोग कर प्राप्त कर सकते हैं() अपनी गतिविधि को प्रबंधित संदर्भ है। इसे गतिविधि में डालें और गतिविधि से किसी भी तरीके का उपयोग करें, जैसे getWindow()।

+4

यह पुराना है लेकिन ध्यान देने योग्य है कि दो स्थितियां हैं जहां यह काम नहीं करेगी। 1) जब संदर्भ अनुप्रयोग संदर्भ है (एक दृश्य के अंदर नहीं होगा, लेकिन यह जानना अच्छा होगा कि क्या आप किसी प्रकार की उपयोगिता कक्षा में हैं)। 2) कभी-कभी दृश्य संदर्भ एक गतिविधि के बजाय एक संदर्भथीमवापर को हल करेगा। मैंने बाद में कारण नहीं बनाया है लेकिन यह ध्यान में रखना कुछ है क्योंकि इससे कक्षा का अपवाद अपवाद होगा। –

+0

समर्थन लाइब्रेरी 23.3 के रूप में अब और ज़रूरी नहीं है। ImageView पर getContext() आधार संदर्भ को पुनर्प्राप्त करने के किसी भी संभावित तरीके के साथ एक TintContextWrapper देता है। – 0101100101

+0

@ 0101100101 गलत। आप अभी भी ContextWrapper को कास्ट करके बेसकॉन्क्स्ट प्राप्त कर सकते हैं। – Maxr1998

4

आप गतिविधि के लिए वर्तमान संदर्भ कास्ट करने के लिए निम्न विधि का उपयोग कर सकते हैं:

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

तो फिर तुम गतिविधि से खिड़की मिल सकती है।

संबंधित मुद्दे