티스토리 뷰
반응형
Description
기존에는 Android Studio에서 레이아웃에 있는 뷰들을 자바 소스코드에서 동적으로 사용하고 싶을 때, findViewById 메소드로 아래와 같이 뷰와 자바 소스코드를 연결해줘야 했다.
TextView tv_name = findViewById(R.id.tv_name);
TextView tv_addr = findViewById(R.id.tv_addr);
tv_name.setText("혀내");
tv_addr.setText("대한민국");
하지만 매번 Activity와 Fragment에서 findViewById로 뷰와 연결해줘야 한다는 건 좀 번거로운 일이다. 그래서 뷰 바인딩(View Binding)을 통해 이런 연결 과정 없이 뷰를 변수처럼 바로 참조해보고자 한다.
사용 방법
1. build.gradle(:app)에 아래 코드르 복사한다.
android {
...
buildFeatures {
// 뷰 바인딩 활성화
viewBinding true
}
}
2. 레이아웃 파일을 하나 생성한다.
<LinearLayout ... >
<TextView android:id="@+id/tv_name" />
<ImageView android:cropToPadding="true" />
<Button android:id="@+id/btn_ok"
android:background="@drawable/rounded_button" />
</LinearLayout>
참고) 뷰 바인딩을 적용하고 싶지 않은 레이아웃 파일은 최상위 뷰에 tools:viewBindingIgnore="true"를 추가한다.
<LinearLayout
...
tools:viewBindingIgnore="true" >
...
</LinearLayout>
3. layout의 Activity에서 아래 코드를 복사한다.
// 전역 변수로 바인딩 객체 선언
private var binding: ActivityMainBinding? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
//setContentView(R.layout.activity_main)
// 바인딩 클래스의 인스턴스를 생성
binding = ActivityMainBinding.inflate(layoutInflater)
// 우리가 만든 루트 뷰를 액티비티에 표시
setContentView(binding.root)
// tv_name -> tvName으로 자동 변환되어 사용할 수 있음!
binding.tvTitle.setText("Hello World..")
}
// 액티비티가 파괴될 때
override fun onDestroy() {
// binding class 인스턴스 참조 정리
binding = null
super.onDestroy()
}
}
findViewById와의 차이점
- Null 안전성
View Binding은 뷰를 직접 참조하기 때문에 NullPointerException이 발생하지 않는다.
- Type 안전성
뷰를 직접 참조하기 때문에 타입 변환 에러가 발생하지 않는다.
참고자료: https://developer.android.com/topic/libraries/view-binding?hl=ko#kotlin
반응형
'ANDROID' 카테고리의 다른 글
[ANDROID] RecyclerView로 커스텀 캘린더뷰 제작하기 (Custom CalendarView) (0) | 2022.04.12 |
---|---|
[ANDROID] Room(SQLite) DB 백업 및 복구 기능 구현하기 (0) | 2022.03.20 |
StartAcitivyForResult / OnActivityForResult deprecated -> registerForActivityResult (0) | 2021.12.04 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 백준27211
- cron시스템
- SELECT #SELECTFROM #WHERE #ORDERBY #GROUPBY #HAVING #EXISTS #NOTEXISTS #UNION #MINUS #INTERSECTION #SQL #SQLPLUS
- 백준
- linux파일
- 버추억박스오류
- linuxtouch
- E_FAIL
- whatis
- api문서
- 쇼미더코드
- baekjoon
- linuxgedit
- cat
- GitHubAPIforJava
- Baekjoon27211
- 리눅스
- awk프로그램
- GithubAPI
- 코테
- linuxawk
- 백준27219
- 리눅스cron
- Baekjoon27219
- 버추억박스에러
- OnActivityForResult
- atq
- virtualbox
- Linux
- 사용자ID
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함