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
- 안드로이드 서비스
- 안드로이드 네비게이션 메뉴
- android example
- 개발자
- 코틀린
- flutter
- hongdroid
- 앱 만드는 법
- 홍드로이드
- 개발강의
- 안드로이드 튜토리얼
- 홍드로이드 강의
- 코딩
- Android Studio
- android studio 앱 만드는 법
- Android
- 안드로이드 예제
- 플러터
- 안드로이드 스튜디오
- 안드로이드 앱 만들기
- java
- 안드로이드 코딩 기초
- android tutorial
- 안드로이드 기초
- 자바
- 앱 만들기
- 자바 튜토리얼
- 안드로이드
- Android Java
- IOS
Archives
- Today
- Total
홍드로이드의 야매코딩
[Android Kotlin] View Binding ( 뷰 바인딩 ) 본문
네 여러분들 안녕하십니까 홍 드로이드 입니다 :)
이번 시간에는 코틀린에서 View Binding ( 뷰 바인딩 )을 하는 방법에 대해서 안내드리도록 하려고 합니다.
우선 뷰 바인딩에 대해서 쉽게 말씀드리면 이전에 지속적으로 써오셨던 코틀린 익스텐션 에서의 뷰 접근을 위해 제공되던 기능과 동일하다고 보시면 됩니다.
현재 코틀린 익스텐션 같은 경우는 2021년에 지원 중단이 될 예정이므로 기존에 익스텐션 기능을 사용하셨던 분들이라면,
모두 뷰 바인딩으로 넘어오셔야 합니다.. !
사용 방법은 어렵지 않으니 바로 시작 하겠습니다.
우선 뷰 바인딩 옵션을 Gradle(그래들) 에서 활성화 시켜줘야 하는데요.. !
아래 내용과 같습니다.
[ 본 강의는 Android Studio 4.1.1 버전을 기준으로 작성되었습니다. ]
안드로이드 스튜디오 좌측 폴더들 중 Gradle Scripts -> build.gradle(Module: 프로젝트명) 파일로 접근하셔서
android { 중괄호 내부 아무곳에 buildFeatures 구문을 작성해주시면 됩니다.. !
android {
// 기존 내용들 생략..
buildFeatures {
// 뷰 바인딩 활성화
viewBinding true
}
}
바로 상단 즈음에 보시게되면 그래들 스크립트가 수정되는 즉시, Sync Now 라는 메시지를 클릭하셔서 그래들 수정사항을 반영해주세요 !
자, 뷰 바인딩 옵션을 활성화하게되면 무엇이 바뀌었다고 볼 수 있을까요??
프로젝트 상의 레이아웃 파일들 (xml 파일)이 바인딩 클래스라는 녀석이 생기게되고,
각 파일들에 선언해두었던 뷰 들의 id 들의 참조가 포함됩니다.
==============================================================================
자동으로 생성된 바인딩 클래스의 이름이 지어지는 기준은 기존에 작성하신 레이아웃 파일 이름에서 조금 변형 됩니다.
1. 파스칼 케이스(첫 글자 대문자) + 카멜 케이스 (낙타의 굽은 등 처럼 단어 단위로 대 소문자처리)
2. 파일 이름 끝에 Binding 이라는 명칭이 달라붙습니다.
for example ) activity_main.xml -> ActivityMainBinding
==============================================================================
자 설명이 너무 길었죠??
이제 한번 직접 몸으로 느껴보기 위해서 프로젝트 생성 시 기본적으로 작성되어있던
activity_main.xml에 다음과 같이 텍스트뷰에 tv_message라는 id를 선언해봅시다.
<?xml version="1.0" encoding="utf-8"?>
<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:context=".MainActivity">
<TextView
android:id="@+id/tv_message"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
그 다음에 바로
MainActivity.kt 파일로 이동하여 다음과 같이 뷰 바인딩 코드를 작성해봅시다.
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import com.hongdroid.viewbindingexample.databinding.ActivityMainBinding
class MainActivity : AppCompatActivity() {
// 전역 변수로 바인딩 객체 선언
private var mBinding: ActivityMainBinding? = null
// 매번 null 체크를 할 필요 없이 편의성을 위해 바인딩 변수 재 선언
private val binding get() = mBinding!!
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
// 기존 setContentView 를 제거해주시고..
// setContentView(R.layout.activity_main)
// 자동 생성된 뷰 바인딩 클래스에서의 inflate라는 메서드를 활용해서
// 액티비티에서 사용할 바인딩 클래스의 인스턴스 생성
mBinding = ActivityMainBinding.inflate(layoutInflater)
// getRoot 메서드로 레이아웃 내부의 최상위 위치 뷰의
// 인스턴스를 활용하여 생성된 뷰를 액티비티에 표시 합니다.
setContentView(binding.root)
// 이제부터 binding 바인딩 변수를 활용하여 마음 껏 xml 파일 내의 뷰 id 접근이 가능해집니다.
// 뷰 id도 파스칼케이스 + 카멜케이스의 네이밍규칙 적용으로 인해서 tv_message -> tvMessage 로 자동 변환 되었습니다.
binding.tvMessage.setText("안녕하세요 홍드로이드 입니다.")
}
// 액티비티가 파괴될 때..
override fun onDestroy() {
// onDestroy 에서 binding class 인스턴스 참조를 정리해주어야 한다.
mBinding = null
super.onDestroy()
}
}
만약 Fragment (프래그먼트) 일 경우에 뷰 바인딩을 활용하고 싶다면 다음과 같이 작성해야 합니다.. !
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.fragment.app.Fragment
import com.hongdroid.viewbindingexample.databinding.FragmentMainBinding
class MainFragment : Fragment() {
// 바인딩 객체 타입에 ?를 붙여서 null을 허용 해줘야한다. ( onDestroy 될 때 완벽하게 제거를 하기위해 )
private var mBinding: FragmentMainBinding? = null
// 매번 null 체크를 할 필요 없이 편의성을 위해 바인딩 변수 재 선언
private val binding get() = mBinding!!
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
// 액티비티 와는 다르게 layoutInflater 를 쓰지 않고 inflater 인자를 가져와 뷰와 연결한다.
mBinding = FragmentMainBinding.inflate(inflater, container, false)
binding.tvMessage.setText(" 안녕 나는 홍드로이드야 !")
return binding.root
}
// 프래그먼트가 destroy (파괴) 될때..
override fun onDestroyView() {
// onDestroyView 에서 binding class 인스턴스 참조를 정리해주어야 한다.
mBinding = null
super.onDestroyView()
}
}
이상 입니다.
질문사항 있으시면 자유롭게 댓글남겨주시면 감사하겠습니다 :)
'Android Kotlin' 카테고리의 다른 글
[ Kotlin ] 코틀린 Null-Safety (Nullable, Non-null) 란? (0) | 2023.02.02 |
---|---|
안드로이드 앱 만들기 (코틀린) 프리미엄 강의 안내 (2) | 2022.05.10 |
Comments