일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 지도학습
- JAVA강좌
- 경사하강법
- 머신러닝 강좌
- 선형회귀
- 머신러닝
- 자바
- python강좌
- 딥러닝
- 비용함수
- unsupervised learning
- acmicpc.net
- c언어 오목
- 파이썬강좌
- feature scaling
- 백준 알고리즘
- supervised learning
- Python강의
- 자바시작하기
- C언어
- 딥러닝공부
- 자바강좌
- java
- 머신러닝 강의
- 효묘블로그
- 인공지능
- Gradient Descent
- 파이썬강의
- 머신러닝공부
- 비지도학습
Archives
- Today
- Total
컴공과컴맹효묘의블로그
Android- viewBinding 본문
반응형
View binding?
Activity에서 view의 값을 변경하거나 이용하고 싶을 때에는 findViewById
를 이용해야 했다. view binding은 이용하고 싶은 view가 많을 때 일일이 findViewById
를 하던 수고를 덜어주고자 나온 기능이다.
view binding이전에 Kotlin에서만 사용 가능한 Kotlin Synthetic이라는 기술이 있었지만, 다음과 같은 이유로 deprecated되었다.
- 전역 네임스페이스 오염
- 다른 layout의 동일한 id값이 존재할 경우 이를 가져오면서 NullPointerException이 발생할 가능이 있음.
- Kotlin only
view binding은 Java에서도 사용 가능하다.
findViewById과 view binding의 비교
- Null 안정성: 유효하지 않은 id를 가져올 경우 null오류 발생 위험
- Type 안정성: Type을 잘못 적을 경우 type 오류 발생 위험
- 속도: findViewById가 상대적으로 느리다.
How to use
공식문서를 참고.
참고: 뷰 결합은 Android Studio 3.6 Canary 11 이상에서 사용할 수 있다.
gradle 파일에 다음을 추가해준다.
gradle
android {
// ...
viewBinding{
enabled = true
}
}
혹은
android{
buildFeatures {
viewBinding true
}
}
Activity
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
var width: Double? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
binding.button.text = "START"
}
}
바인딩 클래스 네임 규칙은 snake_case에서 CamelCase로 변환한 후 뒤에 Binding을 붙이면 된다.
예를 들어 activity_main
이라는 layout의 binding class는 ActivityMainBinding
이다.
View binding on Fragment
fragment에서는 onDestroyView
에서 binding = null
을 해주어야 한다. 그 이유는 fragment는 view보다 오래 살아남기 때문에 view가 destroy될 때 바인딩 클래스의 인스턴스도 같이 정리해주는 것이다.
코드 출처
class BlankFragment : Fragment() {
private var _binding: ResultProfileBinding? = null
// This property is only valid between onCreateView and
// onDestroyView.
private val binding get() = _binding!!
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
_binding = ResultProfileBinding.inflate(inflater, container, false)
val view = binding.root
return view
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
binding.textView.text = "안녕"
}
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
}
Ignore view binding
뷰 바인딩을 사용하고 싶지 않은 레이아웃에는 tools:viewBindingIgnore="true"
속성을 layout에 추가해주면 된다.
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:viewBindingIgnore="true" // 뷰 바인딩 클래스 생성을 안하고 싶을 때
tools:context=".HelloActivity">
</androidx.constraintlayout.widget.ConstraintLayout>
참고 사이트:
반응형
'컴퓨터 > Android Studio' 카테고리의 다른 글
Android- 액션바ActionBar와 툴바Toobar (0) | 2022.03.03 |
---|---|
Android- 플랫폼API, 제트팩 라이브러리 (0) | 2022.03.03 |
Android- platfrom architecture (0) | 2022.03.03 |
Android- Permisson (0) | 2022.03.02 |
Kotlin (0) | 2022.03.01 |
Comments