일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Kotlin
- stack
- toLong()
- bronze3
- gradle설정
- silver4
- bottom-up
- map
- LV1
- Alert Dialog
- 프로그래머스
- Silver5
- 뷰클래스
- bronze4
- naver open api
- RecyclerView
- dp
- 임시저장하기
- 백준
- Android
- RETROFIT
- 다크모드제한
- 녹음기
- bronze2
- LIS
- silver3
- recyclerView 클릭이벤트
- Top-Down
- 테마변경
- fragment에서 context사용
- Today
- Total
유니 코드
[Android] Fragment에서 Context 사용하기(Kotlin) 본문
액티비티에서 Fragment를 띄우는 경우, 액티비티 내부에서 사용할 수 있던 메서드를 사용할 수 없는 경우가 많다
또 파라미터로 Context를 받는 메서드들도 어떻게 사용해야할지 난감하기도 하다
Fragement 클래스는 Context를 상속받지 않기 때문에 발생하는 것이다
따라서 일반적인 방법으로는 Fragment 내부에서 아래와 같은 메서드들을 사용하기 어렵다
1. Context에 정의된 메서드
- findViewById
- runOnUIThread
- getApplicationContext
- startActivity 등
2. context를 파라미터로 받는 메서드
- Toast 등
이러한 메서드들을 사용하기 위한 방법을 알아보도록 하자
Fragment에서 Context를 사용하기 위해서는 Context를 어딘가에서 가져와야한다
Fragment클래스의 생명주기에서 onAttach()의 메개변수로 Context가 들어온다
override fun onAttach(context: Context) {
super.onAttach(context)
}
이렇게 매개변수로 들어온 Context는 Fragment를 띄운 Activity로 형변환해서 사용할 수 있다
Fragment의 전역변수로 선언하고 onAttach()에서 할당해두면
Fragment 어디서나 Context를 참조해서 사용할 수 있다
코드 작성방법
1) Fragment에 전역변수로 Context 참조할 변수 선언
2) onAttach()에서 Context를 Activity로 형변환해서 할당
class ProfileFragment : Fragment() {
// Context 할당할 변수를 프로퍼티로 선언
lateinit var mainActivity: MainActivity
override fun onAttach(context: Context) {
super.onAttach(context)
// Context를 액티비티로 형변환해서 할당
mainActivity = context as MainActivity
}
}
ProfileFragment는 MainActivity에서 띄운 Fragment이다
그래서 전역변수 타입을 MainActivity로 선언해주었고, onAttach()에서 context를 MainActivity로 형변환한 것이다
이렇게 코드를 작성하면 위에서 언급한 원래 사용하지 못했던 메서드들을 Fragment에서도 사용할 수 있게된다