2011-09-11 22 views
28

Kodumu düzenlemeye ve yinelenen işlevleri tek bir sınıfa taşımaya çalışıyorum. kod Bu çizgi aktivitesini uzanan bir sınıf içerisindeki çalışıyor:Android'de bir etkinlik dışında getWindow() nasıl çağırılır?

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

Ben harici sınıfa dahil çalıştığımda o çalışmıyor Ancak.

Bir etkinlik içinde uygulamak için başka bir sınıftan getWindow() öğesini nasıl arayabilirim?

cevap

33

Sınıfı oluştururken ve ilgili yöntemleri çağırırken ve bunu kullanırken, etkinlik başvurusunu iletin.

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

Bunu yaptı. Çok teşekkür ederim. –

+1

@ khr2003 - yardımcı olabildiğime sevindim :) – MByD

+6

Kabul edilen yanıt bu olmamalı, çünkü el ile oluşturulan tüm referansları temizlemezseniz daha sonra bir bellek sızıntısına neden olabilir. Android tarafından sağlanan yönetilen bağlamı her zaman kullanmalısınız. Bunun yerine cevabımı görün. –

-10

Kullanım

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

Olacak var kabul edilen yanıt önerildiği gibi etrafında Referansınızın etmeyecektir

27

kolaylaştırır. Bu çalışır, ancak bellek sızıntılarına neden olabilir. yerine görünümden

bunu kullanın:

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

Sen GetContext kullanarak alabileceği Sizce, içinde() Aktivitenize yönetilen başvuru var. Aktivite'ye yayınlayın ve getWindow() gibi etkinlikten herhangi bir yöntem kullanın.

+4

Bu eski ama bu işe yaramayacak iki durum olduğunu belirterek değer. 1) bağlam, Uygulama bağlamı olduğunda (bir görünümde olmaz, ancak bir çeşit yardımcı program sınıfında olup olmadığınızı bilmek iyidir). 2) zaman zaman görüş bağlamı, bir etkinlik yerine ContextThemeWrapper'a çözülecektir. Daha sonra bunun nedenini çözmedim ama sınıfta bir istisna olmasına neden olabileceği için akılda tutulması gereken bir şey var. –

+0

Artık destek kitaplığı 23.3'ten itibaren çalışmıyor. ImageView'daki getContext(), temel içeriği almanın olası bir yolu olmadan bir TintContextWrapper döndürür. – 0101100101

+0

@ 0101100101 Yanlış. ContextWrapper'a göndererek hala temel standardı alabilirsiniz. – Maxr1998

4

etkinliğe geçerli bağlamı döküm için aşağıdaki yöntemi kullanabilirsiniz:

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

Sonra etkinliğinden pencere alabilirsiniz.

İlgili konular