๊นจ์•Œ ๊ฐœ๋… ๐Ÿ“‘/Android

[Android] Data Binding - View Binding

interfacer_han 2024. 7. 10. 02:02

#1 View Binding

#1-1 ๊ฐœ์š”

 

๋ทฐ ๊ฒฐํ•ฉ  |  Android Developers

์ด ํŽ˜์ด์ง€๋Š” Cloud Translation API๋ฅผ ํ†ตํ•ด ๋ฒˆ์—ญ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ปฌ๋ ‰์…˜์„ ์‚ฌ์šฉํ•ด ์ •๋ฆฌํ•˜๊ธฐ ๋‚ด ํ™˜๊ฒฝ์„ค์ •์„ ๊ธฐ์ค€์œผ๋กœ ์ฝ˜ํ…์ธ ๋ฅผ ์ €์žฅํ•˜๊ณ  ๋ถ„๋ฅ˜ํ•˜์„ธ์š”. ๋ทฐ ๊ฒฐํ•ฉ์€ ๋ทฐ์™€ ์ƒํ˜ธ์ž‘์šฉํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ๋” ์‰ฝ๊ฒŒ ์ž‘์„ฑํ• 

developer.android.com

๋ทฐ ๋ฐ”์ธ๋”ฉ์€ ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ์˜ ๋ถ€๋ถ„์ง‘ํ•ฉ์œผ๋กœ, XML์—์„œ @{ ... } ๋ฐ @={ ... }๊ฐ€ ์—†๋Š” ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ์ด๋ผ๊ณ  ๋ณด๋ฉด ๋œ๋‹ค. ์ฆ‰, View Binding์€ findViewById์˜ ์•”์‹œ์  ์„ ์–ธ๋งŒ์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์ž‘์—…์ด๋‹ค.

 

#1-2 View Binding์˜ ์žฅ์ 

1. ํ”„๋กœ์ ํŠธ ์ปดํŒŒ์ผ ์‹œ๊ฐ„์ด ์งง์Œ
2. xml ์ฝ”๋“œ๋ฅผ <layout> ํƒœ๊ทธ๋กœ ๊ฐ์Œ€ ํ•„์š”๊ฐ€ ์—†์Œ (= Bindingํ•  View(XML ์ฝ”๋“œ)๋ฅผ ์ผ์ ˆ ๊ฑด๋“ค์ง€ ์•Š์•„๋„ ๋จ)

๋”ฐ๋ผ์„œ, @{ ... } ๋ฐ @={ ... }์ด ์“ฐ์ด์ง€ ์•Š์€ ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ ์ฝ”๋“œ๋ผ๋ฉด, Data Binding์„ View Binding์œผ๋กœ ์ „ํ™˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

#2 View Binding ์‚ฌ์šฉํ•˜๊ธฐ

#2-1 View Binding์„ ์ ์šฉํ•  ์ƒ˜ํ”Œ ์•ฑ

 

[Android] Data Binding - ๊ธฐ์ดˆ

#1 ๋ฐ์ดํ„ฐ ๋ฐ”์ธ๋”ฉ ์‚ฌ์šฉ ์ „ #1-1 ์˜ˆ์‹œ ์•ฑ ์œ„๊ณผ ๊ฐ™์€ ๊ฐ„๋‹จํ•œ ์•ฑ์ด ์žˆ๋‹ค. Button์„ ๋ˆ„๋ฅด๋ฉด, EditText์˜ text๊ฐ€ ๋ฐ”๋กœ ์œ„์— ์žˆ๋Š” TextView์˜ text์— ๋Œ€์ž…๋œ๋‹ค. ์ด ์•ฑ์˜ ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. #1-2 activity_main.xml #1-3 Main

kenel.tistory.com

Data Binding์ด ์“ฐ์ธ ์œ„ ๊ฒŒ์‹œ๊ธ€์˜ ํ”„๋กœ์ ํŠธ๋ฅผ View Binding์œผ๋กœ ์ „ํ™˜ํ•ด๋ณด๊ฒ ๋‹ค.

 

#2-2 build.gradle.kts (๋ชจ๋“ˆ ์ˆ˜์ค€) ์ˆ˜์ •

plugins {
    ...
}

android {
    ...
    buildFeatures {
        viewBinding = true
    }
}

dependencies {

    ...
}

dataBinding = true ๊ตฌ๋ฌธ์„ ์ œ๊ฑฐํ•˜๊ณ , ๋Œ€์‹  viewBinding = true๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค.

 

#2-3 activity_main.xml ์ˆ˜์ •

<?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">

    ...

</androidx.constraintlayout.widget.ConstraintLayout>

<layout> ํƒœ๊ทธ๋ฅผ ์ œ๊ฑฐํ•œ๋‹ค.

 

#2-4 MainActivity.kt ์ˆ˜์ •

// package com.example.viewbindingbasics

import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import com.example.viewbindingbasics.databinding.ActivityMainBinding

class MainActivity : AppCompatActivity() {
    private lateinit var binding: ActivityMainBinding
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

//      binding = DataBindingUtil.setContentView(this, R.layout.activity_main)
        binding = ActivityMainBinding.inflate(layoutInflater)
        val view = binding.root
        setContentView(view)

        binding.apply {
            myButton.setOnClickListener {
                myTextView.text = myEditText.text
            }
        }
    }
}

DataBindingUtil์„ ์ด์šฉํ•˜๋Š” ๋Œ€์‹  ActivityMainBinding.inflate()๋กœ View๋ฅผ ๊ตฌ์„ฑํ•œ๋‹ค.

 

#3 ์ž‘๋™ ํ™•์ธ

 

#4 ์š”์•ฝ

View Binding์€ @{ ... } ๋ฐ @={ ... }์ด ์—†๋Š” Data Binding์ด๋‹ค.

 

#5 ์™„์„ฑ๋œ ์•ฑ

 

android-practice/data-binding/ViewBindingBasics at master ยท Kanmanemone/android-practice

Contribute to Kanmanemone/android-practice development by creating an account on GitHub.

github.com