반응형
Fragment 내 View 제어
- onCreateView 메서드에서 생성한 View 객체를 통해 내부의 View 주소값을 엊어옴
- 이때 findViewById 라는 메서드를 사용
✔️ 이전에 kotlin-android-extensions 을 사용할 때는 View에 대해 자동으로 변수를 생성해주어 사용할 수 있었는데 해당 방식을 사용할 때는 onCreateView 에서는 view를 반환하기만 하기 때문에 아직 뷰와 주소값이 매핑되질 않아서 버튼 동작 등의 기능 구현을 할 수 없었다. (onViewCreated 에서 해줘야 함) 하지만!! extension 은 이제 deprecated 되었고 ViewBinding 을 기본으로 사용하는데 해당 방법에서는 onCreateView 에서 동작 구현이 바로 가능하다.
// 프래그먼트 내 뷰를 제어하기 위해서는 여기서 필요한 처리를 함
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
val view = inflater.inflate(R.layout.fragment_first,null)
// 내부의 View들의 주소값을 가져옴
val text1 = view.findViewById<TextView>(R.id.textView)
val btn1 = view.findViewById<Button>(R.id.button)
btn1.setOnClickListener {
text1.text = "프래그먼트 문자"
}
// 뷰바인딩 방식으로 사용 가능
frag_binding = FragmentFirstBinding.inflate(layoutInflater) // 뷰바인딩 객체
val view = frag_binding.root
frag_binding.button.setOnClickListener {
frag_binding.textView.text = "프래그먼트 문자열"
}
return view
}
✔️ activity 프로퍼티를 사용하면 Fragment를 소유하고 있는 Activity에 접근이 가능
=> 강의에서는 extension 을 사용하던 시절이라 그런지 Activity를 추출한 parent 에서 바로 액티비티 내부 view에 접근하고 있다.
하지만 뷰바인딩을 사용하는 지금은 사용할 수 없는 방식이다. 액티비티의 binding 객체를 사용하려 시도했지만 private 객체이기 때문에 사용할 수 없어서 findViewById 메서드를 사용했다.
frag_binding.button2.setOnClickListener {
// MainActivity를 추출
val parent = activity as MainActivity // activity 프로퍼티를 사용해 MainActivity를 추출
//parent.textView.text = "액티비티 문자열이다 뿅"
parent.findViewById<TextView>(R.id.textView).text = "액티비티 문자열이다 뿅"
}
[참고 자료]
https://thdev.tech/android/2020/10/07/Remove-kotlinx-synthetic/
반응형
'Android' 카테고리의 다른 글
[안드로이드/Fragment] ListFragment (0) | 2023.04.22 |
---|---|
[안드로이드/Fragment] Activity Controller (0) | 2023.04.22 |
[안드로이드/Fragment] Fragment 생명주기 (1) | 2023.04.21 |
[안드로이드/Fragment] Fragment 란? (0) | 2023.04.21 |
[안드로이드/Service] IPC 란? (0) | 2023.04.20 |