1. View Binding : xml 레이아웃 파일에 정의된 뷰 요소들을 쉽게 쓸 수있다.
buildFeatures{
viewBinding true
}
ㄱ. 먼저 gradle Scripts/ build.gradle(Modul.app) 에다가 위 코드를 써주고 Sync를 꼭 해준다(뷰바인딩 라이브러리 추가)
class MainActivity : AppCompatActivity() {
private val binding by lazy { ActivityMainBinding.inflate(layoutInflater) }
private lateinit var applelauncher: ActivityResultLauncher<Intent>
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(binding.root)
}}
ㄴ. 우선 상수(val)로 변수이름 하나 선언해주고 lazy를 이용한다.
: 필요한 경우에만 초기화되고 그렇지 않으면 초기화 되지않는다.(성능↑, 안정성(런타임오류)↑, 가독성↑)
ㄷ. ActivityMainBinding : 현재 클래스와 연동되는 xml파일의 이름+Binding (여기서 xml파일의 이름은 : activity_main, 언더바는 제외) , 레이아웃의 파일이름을 기반으로해서 생성되는 클래스
ㄹ. inflate(layoutInflater) : layoutInflater를 통해서 해당 xml 레이아웃파일을 실제 뷰객체로 변환한다.
ㅁ. 정리하자면 binding이라는 변수에 ActivityMainBinding라는 xml파일을 기반으로 생성된 클래스의 뷰객체를 담는다.
ㅂ. 예를들어 binding이라는 변수로 bind.btn , bind.textView, bind.editTextView ( 여기서 btn, textView, editTextView는 바인딩 된 xml 내부에있는 버튼,텍스트뷰,에딭 텍스트뷰 요소들의 id이다.) 처럼 뷰 요소들의 id만 알면 이렇게 간단하게 쓸 수 있다.
ㅅ. 기존의 setContentView(xml파일이름) 대신 setContentView(binding.root)을 써준다 .
- binding.root : 바인딩된 해당 xml파일의 최상위 레이아웃뷰(root)
- setContentView : 화면에 표시할 레이아웃을 설정 하는데 보통 한 번 호출해서 쓰고, 동일한 엑티비티에서 다른 레이아웃으로 변경하는 일은 거의 없다. 보통 onCreate내에서 수행되고 한번 호출이 되는데 생명주기와 관련없이 반복해서 호출하면 안정성에 문제가 생길 수 있다.
(예)
<TextView
android:id="@+id/name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:maxLines="2"
android:ellipsize="end"
android:text="..."
android:textSize="18sp"
/>
<TextView
android:id="@+id/address"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="TextView"
android:textSize="15sp"/>
<TextView
android:id="@+id/price"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="TextView"
android:textSize="18sp"
android:textStyle="bold"/>
ㅇ. 위 xml파일을 기반으로 생성된 클래스의 뷰객체를 담은 변수 binding을 가지고
val name = binding.name
val address = binding.address
val price = binding.price
ㅈ. 이런식으로 해당 뷰요소들의 id를 이용해서 binding을가지고 쉽게 접근할 수 있다.
'TIL, WIL(일기)' 카테고리의 다른 글
230829 어댑터&viewType 2탄 (0) | 2023.08.30 |
---|---|
230829 1탄 어댑터&viewType (3) | 2023.08.29 |
230824 뒤로가기버튼과 이미지 겹치는 방법 (0) | 2023.08.24 |
230823 Componenet Tree 버그(세상이 나를 억까한다... ) (4) | 2023.08.23 |
23.08.22 3탄 registerForActivityResult (2) | 2023.08.22 |