Archives
Recent Posts
«   2024/10   »
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
Today
Total
관리 메뉴

안드로이드 개발자의 창고

[27일차 Android] View Binding 본문

Computer/Android

[27일차 Android] View Binding

Wise-99 2023. 6. 7. 18:01

 

출처 : 안드로이드 앱스쿨 2기 윤재성 강사님 수업 PPT

 

 

 

📖 View Binding

  • layout 폴더에 있는 xml 파일을 관리하는 클래스를 자동 생성하여 이를 통해 View를 관리할 수 있는 개념
  • layout 폴더에 있는 xml 파일 당 하나의 클래스가 생성되며 이 클래스에는 xml 파일에 배치한 View들을 관리할 수 있는 기능이 구현되어 있다.
  • 안드로이드 OS가 알아서 View를 추출하여 변수에 담아준다.
  • 이를 통해 개발자가 View를 직접 추출하지 않고 사용할 수 있다.

 

 

 

✔️ 사전 작업

  • View Binding을 사용하기 위해서는 app 수준의 gradle 파일에 다음과 같이 추가해준다.

gradle(Moudule) - android { ... } 내부에 해당 코드 삽입

viewBinding {
    enabled = true
}

 

 

 

✔️ 예제 코드

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
    android:orientation="vertical"
    tools:context=".MainActivity" >

    <TextView
        android:id="@+id/textView"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="TextView"
        android:textAppearance="@style/TextAppearance.AppCompat.Large" />

    <Button
        android:id="@+id/button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="10 + 10" />

    <Button
        android:id="@+id/button2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="10 - 10" />

    <Button
        android:id="@+id/button3"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="10 * 10" />

    <Button
        android:id="@+id/button4"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="10 / 10" />
</LinearLayout>

MainActivity.kt

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.View
import android.view.View.OnClickListener
import com.test.android02_viewbinding.databinding.ActivityMainBinding
import com.test.android02_viewbinding.databinding.ActivityTestBinding

class MainActivity : AppCompatActivity() {

    // ViewBinding 객체를 담을 변수
    lateinit var activityMainBinding: ActivityMainBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        activityMainBinding = ActivityMainBinding.inflate(layoutInflater)
        setContentView(activityMainBinding.root)

//        activityMainBinding.button.setOnClickListener {
//            activityMainBinding.textView.text = "10 + 10 = ${10 + 10}"
//        }
//
//        activityMainBinding.button2.setOnClickListener {
//            activityMainBinding.textView.text = "10 - 10 = ${10 - 10}"
//        }
//
//        activityMainBinding.button3.setOnClickListener {
//            activityMainBinding.textView.text = "10 * 10 = ${10 * 10}"
//        }
//
//        activityMainBinding.button4.setOnClickListener {
//            activityMainBinding.textView.text = "10 / 10 = ${10 / 10}"
//        }

        activityMainBinding.run {
            button.run {
                setOnClickListener {
                    activityMainBinding.textView.text = "10 + 10 = ${10 + 10}"
                }
            }

            button2.run {
                setOnClickListener {
                    activityMainBinding.textView.text = "10 - 10 = ${10 - 10}"
                }
            }

            button3.run {
                setOnClickListener {
                    activityMainBinding.textView.text = "10 * 10 = ${10 * 10}"
                }
            }

            button4.run {
                setOnClickListener {
                    activityMainBinding.textView.text = "10 / 10 = ${10 / 10}"
                }
            }
        }
    }
}

✔️ 코드 리뷰

  • activityMainBinding = ActivityMainBinding.inflate(layoutInflater)
    • ViewBinding 객체를 가져온다.
    • layoutInflater : XML 파일을 통해 객체를 생성하는 도구
  • setContentView(activityMainBinding.root)
    • viewBinding 객체가 관리하는 View 중에 최상위 View 중 지정하여 화면에 나타나게 한다.
  • activityMainBinding을 통해 객체의 ID 값을 가져올 수 있다.
  • 리스너를 구현하면서 오버라이딩할 함수가 하나일 경우 고차 함수를 이용하여 작성할 수 있다.