일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 스택 자바 코드
- ar vr 차이
- 큐 자바 코드
- ANR이란
- android ar 개발
- rxjava hot observable
- jvm 작동 원리
- 안드로이드 레트로핏 crud
- android retrofit login
- 객체
- 멤버변수
- 서비스 vs 쓰레드
- 안드로이드 유닛 테스트
- 플러터 설치 2022
- jvm이란
- 서비스 쓰레드 차이
- Rxjava Observable
- 클래스
- 자바 다형성
- 안드로이드 라이선스
- 스택 큐 차이
- 2022 플러터 설치
- rxjava disposable
- 안드로이드 레트로핏 사용법
- 안드로이드 유닛 테스트 예시
- 안드로이드 os 구조
- 안드로이드 라이선스 종류
- 2022 플러터 안드로이드 스튜디오
- rxjava cold observable
- 안드로이드 유닛테스트란
- Today
- Total
나만을 위한 블로그
[Android] Context 받아오는 방법들 본문
Context는 개발자가 안드로이드의 기능을 쓰려고 할 때 사용하는 촉매제 같은 것으로 생각하고 있었다.
그런데 이 Context를 받아오는 방법이 여러가지라서 조금 정리해보려고 한다.
1. this : 가장 흔한 방법이다. onCreate() 등에서 토스트, 다이얼로그 따위를 쓰기 위해 Context를 받아올 때 사용하는 방법이다.
2. XXXActivity.this : 이것 또한 흔한 방법이다. 위의 방법으로 안 될 때 어떤 액티비티에서 Context를 가져와 사용한다.
3. 클래스 전역변수로 Context 변수 선언 : 처음부터 전역변수를 하나 만들고 사골 끓이듯이 써먹는 방법이다. 난 주로 리사이클러뷰 어댑터를 만들 때 onCreateViewHolder()에서 쓴다.
4. getApplicationContext : 이것도 무난하게 쓰인다.
5. public static Context context : 서비스에 리시버를 등록해 다이얼로그를 쓸 때 위의 방법대로 Context를 받아오면 BadTokenException 에러가 뜨며 다이얼로그가 출력되지 않는다. 원인은 백그라운드에서 동작하는 서비스 안의 리시버가 다이얼로그를 띄우는 데 사용할 Context를 참조하지 못하는 것이다.
해결법은 다이얼로그를 띄울 액티비티에서 액티비티의 Context를 제목대로 public static Context context; 를 전역변수로 선언해주고 onCreate()에 context=this; 를 선언해준다.
그 다음 다이얼로그를 출력 시 다이얼로그 Builder의 ()안(context 매개변수 자리)에 Activity.context를 넣어준다.
코드로는 대충 이렇다.
AlertDialog.Builder builder = new AlertDialog.Builder(Activity.context);
builder.setTitle("알림!").setMessage("메시지");
builder.setPositiveButton("확인", new DialogInterface.OnClickListener() {
참고한 사이트 : https://salix97.tistory.com/34
이것 말고도 방법이 더 있을 것 같은데 나머지는 외국 사이트 등에서 공부하면서 찾아봐야겠다.
'Android' 카테고리의 다른 글
[Android] ButterKnife 사용 중 The given artifact contains a string literal with a package reference 'android.support.v4.content' that cannot be safely rewritten. for androidx 에러 (0) | 2019.12.03 |
---|---|
[Android] 안드로이드 스튜디오에서 코틀린 코드를 자바 코드로 변환하기 (0) | 2019.12.03 |
[Android] AR core란? (0) | 2019.12.02 |
[Android] 스피너란? (0) | 2019.12.01 |
[Android] ArrayAdapter란? (0) | 2019.12.01 |