티스토리 뷰

Android

[Android] DataBinding

DDunTory 2021. 3. 2. 19:30

DataBinding

-findViewById 칠을 없애보자

 

build.gradle

//안드로이드 스튜디오 4.1 이상에서는 아래와 같이
anroid {
	buildFeatures {
        dataBinding = true
    }
}

//안드로이드 스튜디오 4.1 미만에서는 아래와 같이
anroid {
	databinding {
        enabled = true
    }
}

 

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<layout 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">

    <androidx.constraintlayout.widget.ConstraintLayout
        android:id="@+id/name_text"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        tools:context=".activity.Section2MainActivity">

        <TextView
            android:id="@+id/greeting_text_view"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/insert_you_name_here"
            android:textSize="30dp"
            android:textStyle="bold"
            android:typeface="sans"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintHorizontal_bias="0.532"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintVertical_bias="0.175" />

        <EditText
            android:id="@+id/name_edit_text"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_margin="20dp"
            android:ems="10"
            android:hint="@string/insert_you_name_here"
            android:inputType="textPersonName"
            android:textSize="30sp"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/greeting_text_view"
            app:layout_constraintVertical_bias="0.126" />

        <Button
            android:id="@+id/submit_button"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@string/submit"
            android:textSize="30sp"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintHorizontal_bias="0.498"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintVertical_bias="0.613" />
      
    </androidx.constraintlayout.widget.ConstraintLayout>
</layout>

위와 같이 ConstraintLayout을 layout으로 감싸고 ConstraintLayout에 있던 xmln 부분을 layout으로 이동시킵니다

data class Student(
    var id: Int,
    var name: String,
    var email: String
)
<data>
    <variable
        name="student"
        type="com.anushka.bindingdemo1.data.Student" />
</data>

데이터 객체를 쓰고 싶으면 위와같이 data class를 만들고 xml에 data variable을 추가해 줍시다!

 

MainActivity

import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.view.View
import androidx.databinding.DataBindingUtil
import com.anushka.bindingdemo1.R
import com.anushka.bindingdemo1.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.submitButton.setOnClickListener {
            displayGreeting()
        }
        binding.student = getStudent()    //  .student는 second xml의 data student임

    }

    private fun displayGreeting() {
        binding.apply {          
            greetingTextView.text = "Hello! " + nameEditText.text
        }
    }
    
    private fun getStudent(): Student {
        return Student(
            1,
            "Alex",
            "alex@gmail.com"
        )
    }
}

 

데이터 바인딩은 Camel 표기법을 따릅니다.

 

파일 이름 : UpperCamel

id : lowerCamel

 

예를 들면 layout의 이름이 main_activity 이면 MainActivity 과 같이 첫글자를 대문자로 만들고 언더바를 지우며 언더바 뒤 문자를 대문자로 만듭니다.

 

우선 layout의 이름이 activity_main 이었으니 ActivityMain으로 바뀌겠죠?

binding을 선언해준 뒤, DataBindingUtil.setContentView로 액티비티의 레이아웃을 지정해줍니다.

 

id값은 언더바를 제거해주고 뒤에 문자를 upper camel로 만듭니다.

Button의 id가 submit_button 이었으니 submitButton으로 바뀝니다.

 

데이터 바인딩도 계속 쓰려면 binding. 을 써줘야 하는데 이를 극뽁? 해줄 apply라는 코틀린 함수가 존재합니다

 

binding.apply{} 로 binding.을 쓸 코드에서 binding을 제거하여 쓸 수 있게 해준답니다~

 

이로써 기본적인 데이터바인딩에 대해 알아보았습니다!

'Android' 카테고리의 다른 글

[Android] ViewModelFactory  (0) 2021.03.07
[Android] ViewModel  (0) 2021.03.06
[Android] MVVM 패턴  (0) 2020.08.11
[Android] LiveData 소개  (0) 2020.08.10
[Android] Room 소개  (0) 2020.08.03
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/08   »
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
글 보관함