[Android] getResources() 함수를 Activity에서 사용하지 않고 다른 클래스에서 사용하려면.

2012. 1. 5. 13:47개발관련기록/Android(인조인간)

반응형









질문자 내용

질문

getResources()를 사용하고 싶다.

하지만 Activity가 아닌 다른 클래스에서 호출하려면 사용이 불가하다.

상속받지 않은 단일 클래스에서 import를 해도 쓸수가 없는데 어떻게 된 상황인가? 



답변


클래스 생성시 생성자에서 Context를 받게 한후
A= new A(this); this 는 Context

사용할 클래스 

 Public class A{

Context mContext;

public A(Context context)
{

mContext = context;
mContext.getResources(); 



이유 : 

getResources()메서드는 추상클래스인 Context에 추상 메서드으로써 이런 상속 관계를 가지고 있습니다.
 

ListActivity -> Activity -> ContextThemeWrapper -> ContextWrapper -> ContextWrapper -> Context

 

즉, Activity 상속받아 구현하셨다면 자기 자신이 Context가 되는 겁니다.
그래서 다른 클래스에서 사용하실려면 자기 자신(this)을 인자값으로 넘겨 주시면 됩니다.

다른 클래스에서 받을때 클래스 타입은 Context가 되겠죠!!
 

그런데 가끔 getResources()관련해서 인자값으로 넘겨줘도 다른 클래스에서 사용하면 에러가 난다는 글들이 있습니다.

그 이유는 구현한 클래스가 Context관련 클래스를 상속받아 구현한 클래스가 아닌데 this을 넘겨 주거나  

또는 onCreate() 메서드가 호출 되기전에 멤버 변수에 다른클래스 메서드를 호출하고  this를 넘겨준다거나  

객체가 소멸(destory)됐는데 호출한 경우 런타임 에러가 발생합니다. 

에러 발생시 이런 문제가 없는지 체크 하시기 바랍니다. 

반응형