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)됐는데 호출한 경우 런타임 에러가 발생합니다.
에러 발생시 이런 문제가 없는지 체크 하시기 바랍니다.
'개발관련기록 > Android(인조인간)' 카테고리의 다른 글
[Android] 안드로이드에서 DataBase 관리 , DB관리 (0) | 2012.01.05 |
---|---|
[Android] Tab 이미지 배경색 넣기, 아이콘 생성하기. (1) | 2012.01.03 |
[Andriod] 현재 시간 얻기 소스 (1) | 2012.01.02 |
[Android 오류] Error in an XML file: aborting build. 오류 (0) | 2011.12.30 |
[Android] 물리엔진관련 내용 [펌] (0) | 2011.12.06 |