티스토리 뷰

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
250x250
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/05   »
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
글 보관함