Android/DataBinding

DataBinding과 data class

${Harvey} 2022. 11. 21. 22:39

 

data class를 생성.

package com.example.bindingtest

data class Person(

    val name: String,
    val age: Int


)
 

 

 

 

res 파일에 data 형식 지정. type 은 dataclass 경로.

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

    //data 형식 지정.
    <data>

        <variable
            name="user"
            type="com.example.bindingtest.Person" />

    </data>

    <androidx.constraintlayout.widget.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
 

 

 

data class 형식에 맞춰 집어넣고

res파일 user와 결합.

res파일에서도 logic을 구현하여 실행 가능.(비추)

class MainActivity : AppCompatActivity() {

    private lateinit var binding : ActivityMainBinding

    var testCount = 20

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = DataBindingUtil.setContentView(this,R.layout.activity_main)

        val person = Person("강병진",20)
        binding.user = person

    }

    fun myClick(view : View){ //버튼 누를 때마다 testCount++
        Log.d("MainActivity","onClick")
        testCount++

        val person = Person("강병진",testCount)
        binding.user = person

    }
}
 
<TextView
            android:id="@+id/dataBindingEx"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@{user.name}"
            android:textSize="50sp"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />


        <!--  xml에서 logic을 넣는 것은 선호하지 않는 방식.          -->
        <TextView
            android:id="@+id/dataBindingEx2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"

            android:text="@{user.age > 30 ? `나이 많음` : `나이 적음`}"
            android:textSize="50sp"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintHorizontal_bias="0.501"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/dataBindingEx"
            app:layout_constraintVertical_bias="0.174" />

        <TextView
            android:id="@+id/textView"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="@{Integer.toString(user.age)}"
            android:textSize="50sp"
            app:layout_constraintBottom_toTopOf="@+id/dataBindingEx"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:onClick="myClick"
            android:text="btn"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/dataBindingEx2" />