728x90
반응형
프래그먼트로 개발을 하다 보면 Activity, Context를 가져와야 하는 경우가 생긴다.
그럴 때는 아래와 같이 사용하면 된다.
# 사용법
## Activity 가져오기
액티비티를 가져오고 싶으면 requireAcivity()를 사용하면 된다.
예시를 들면 프래그먼트안에서 findViewById와 Toast를 사용하고 싶으면 아래와 같이 사용하면 된다.
class MainFragment : Fragment(){
private lateinit var img : ImageView
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
img = requireActivity().findViewById(R.id.img)
Toast.makeText(requireActivity(),"테스트 문구 입니다.",Toast.LENGTH_SHORT).show()
}
}
## Context 가져오기
### 방법 1
context를 가져오고 싶으면 requireContext()를 사용하면 된다.
예시를 들면 프래그먼트에서 context가 필요해서 사용하고 싶으면 위에 예시와 같이 context가 필요한 자리에 사용하면 된다.
### 방법 2
onAttach에서 context를 받아 부모 액티비티로 캐스팅하여 선언해놓은 부모 액티비티 변수에 할당을 하면 사용이 가능하다.
자세한 사용법은 아래를 보면 된다.
class MainFragment : Fragment(){
// context 할당할 변수 선언
private lateinit var mainActivity: MainActivity
private lateinit var img : ImageView
override fun onAttach(context: Context) {
super.onAttach(context)
// context를 액티비티로 캐스팅하여 할당해줌
mainActivity = context as MainActivity
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
img = mainActivity.findViewById(R.id.img)
Toast.makeText(mainActivity,"테스트 문구 입니다.",Toast.LENGTH_SHORT).show()
}
}
# (get)Activity() 와 requireActivity() / (get)Context 와 requireContext의 차이점
두 개의 차이점은 null값 예외처리를 하냐 안 하냐의 차이이다.
Activity, Context는 null이면 NPE 널 포인트 오류가 나지만 requireActivity, requireContext는 null이면 예외처리를 해준다.
따라서 그냥 Activity,Context 쓰는 거보다 require 붙여 사용하는 것이 권장된다.
반응형
'소소한 개발 꿀팁' 카테고리의 다른 글
안드로이드 스튜디오 로그캣(Logcat) 이전 버전으로 돌아가기(돌핀 이전) (0) | 2022.11.27 |
---|---|
[Android] getAdapterPosition() Deprecated 해결 방법 (0) | 2022.08.20 |
[Android]안드로이드 프래그먼트 종료(finish) 시키기 (0) | 2022.03.02 |
[Android]안드로이드 개발시 다크 모드 무시/해제 하기 (0) | 2022.03.01 |
다른 액티비티에서 특정 액티비티 종료하기 (0) | 2022.01.05 |