티스토리 뷰
728x90
fragment에서 Toast 메시지를 띄우거나 부모 액티비티의 함수를 호출할 때, context/activity가 필요한 경우가 있다.
하지만 Fragment 클래스에는 context가 포함되어 있지 않기 때문에 어떻게 해야할지 곤란했다.
- context 얻기
class CustomFragment : Fragment() {
private lateinit var mContext: Context
override fun onAttach(context: Context) {
super.onAttach(context)
mContext = context
}
}
fragment 생명주기 가장 처음에 호출되는 onAttach의 인자로 context가 들어옴을 발견했다.
이는 부모 액티비티의 context로, 이 context를 onAttach 밖에 선언된 context에 저장한다.
그러면 Toast를 출력하는 등 context가 필요한 경우에 언제든지 사용할 수 있다.
- activity 얻기
class CustomFragment : Fragment() {
private lateinit var mContext: Context
private lateinit var mActivity: MainActivity
override fun onAttach(context: Context) {
super.onAttach(context)
mContext = context
mActivity = context as MainActivity
}
}
그리고 onAttach에서 인자로 들어온 context는 자신을 호출한 부모 액티비티의 context이기 때문에,
부모 액티비티로 형변환(as 연산자)하면 액티비티도 얻을 수 있다.
728x90
'android' 카테고리의 다른 글
[안드로이드/코틀린] Intent와 Intent-filter 알아보기 (0) | 2023.09.25 |
---|---|
[안드로이드/코틀린] PendingIntent 개념 알아보기 (0) | 2023.09.25 |
[안드로이드/코틀린] onBackPressed() deprecated 대체 방법, OnBackPressedCallback 알아보기 (0) | 2023.09.23 |
[안드로이드/코틀린] Activity와 Fragment 간 데이터 전달하기 (0) | 2023.09.21 |
[안드로이드/코틀린] 커스텀 다이얼로그 구현 방법 두 가지 (0) | 2023.09.21 |