Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- coroutine
- build
- image
- Gradle
- studio
- 안스
- MVVM
- RecyclerView
- 스튜디오
- error
- dart
- 코루틴
- Github
- 코틀린
- 안드로이드스튜디오
- 레트로핏
- 깃헙
- Retrofit
- 안드로이드
- WebView
- 웹뷰
- 에러
- 유튜브
- GIT
- Android
- 의존성주입
- viewpager
- Kotlin
- 안드로이드 스튜디오
- ADB
Archives
- Today
- Total
코딩하는 일용직 노동자
ViewBinding 이용하기 본문
안드로이드 초기부터 xml 파일의 뷰들과 연결하기 위해 findViewById를 해왔습니다만 매우 불편했습니다.
코틀린을 사용할땐 kotlin-android-extensions 덕분에 findViewById를 하지 않는 편리함이 있었습니다.
하지만, 서로다른 xml 파일에서 동일한 id를 사용할경우가 많기 때문에 kotlin-android-extensions를 사용할 경우 코드가 헷갈릴 수 있었습니다.
때문에 구글에서는 안드로이드 스튜디오 4.1 버전부터 kotlin-android-extensions의 지원을 중단하고 ViewBinding 을사용하도록 안내하고 있습니다.
ViewBinding 은 안드로이드 스튜디오 3.6 버전부터 지원했습니다.
app 레벨의 build.gradle 파일에서 아래처럼 추가하면 되었습니다.
android {
...
viewBinding {
enabled = true
}
}
안드로이드 스튜디오 4.0 버전부터는 아래처럼 변경되었습니다.
android {
...
buildFeatures {
viewBinding = true
}
}
우선 테스트를 하기 위해 간단한 프로젝트를 만들었습니다.
MainActivity 와 activity_main.xml 이 있는 간단한 프로젝트에
텍스트뷰 3개와 버튼뷰 1개를 배치해봤습니다.
이제 MainActivity 소스내에서 아래처럼 뷰바인딩을 사용하기 위해 셋팅을 하고
만들어진 뷰바인딩 객체 mBinding 을 이용해서 텍스트뷰와 버튼뷰를 이용합니다.
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// setContentView(R.layout.activity_main) // 뷰바인딩을 쓰면 이 코드는 필요없다.
mBinding = ActivityMainBinding.inflate(layoutInflater)
setContentView(mBinding?.root)
mBinding?.textView01?.text = "텍스트뷰 제목"
mBinding?.textView02?.text = "뷰바인딩"
mBinding?.button?.setOnClickListener {
Toast.makeText(this@MainActivity, "버튼 클릭", Toast.LENGTH_SHORT).show()
}
mBinding?.textView03?.text = "간단하네"
}
프래그먼트에서는 아래 코드처럼 뷰바인딩을 셋팅해주면 됩니다.
private var mBinding: ActivityMainBinding? = null
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
mBinding = ActivityMainBinding.inflate(inflater, container, false)
// Inflate the layout for this fragment
// return inflater.inflate(R.layout.fragment_main, container, false) // 뷰바인딩을 쓰면 이 코드는 필요없다.
return mBinding?.root
}
null safety 때문에 소스에 ? 가 많이 표시되는게 좀 거슬리다면 mBinding 객체를 생성할때 아래처럼 살짝만 바꿔주면 됩니다.
private lateinit var mBinding: ActivityMainBinding
'안드로이드' 카테고리의 다른 글
커스텀 다이얼로그 라운드 배경에 흰색 보이는 현상 수정하기. (0) | 2021.03.23 |
---|---|
AndroidX 라이브러리 마이그레이션하기 (0) | 2021.03.15 |
Lint found fatal errors while assembling a release target. 에러 해결 (0) | 2021.03.04 |
FCM data & notification 처리에 관하여.. (0) | 2021.02.28 |
NotificationBadge 라이브러리 소개 (0) | 2021.02.22 |