본문 바로가기

Frontend/Kotlin

About DataBinding

데이터바인딩이란?

데이터 바인딩은 UI 레이아웃의 뷰를 앱 코드에 저장된 데이터와 연결하는 방식을 제공한다. LiveData와 함께 사용될때 활용도가 높다. 

이점은 다음과 같다.

- findViewById를 사용하지 않아도 자동으로 xml에서 만든 View들을 만들어 준다.

- RecyclerView 사용시 각각의 item들을 set해주지 않아도 xml에서 처리할 수 있다.

- Observable을 이용해 실시간으로 데이터를 바꿔줄 수 있다.

 

사용방식

1.

dataBinding{
        enabled = true
    }

gradle에 다음의 코드를 추가해 준다.

 

2.

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

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical">

        <Button
            android:id="@+id/sample"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Hello World!"
            />
    </LinearLayout>

</layout>

xml 창에 다음과 같이 작성해준다. 이때 태그 최상위에 layout 태그로 전체를 감싸야하고 <data>태그 안에는 xml에서 사용할 변수들을 <variable> 태그를 이용해 작성해주면 된다. 

 

3.

class MainActivity : AppCompatActivity() {
    private lateinit var binding: ActivityMainBinding
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = DataBindingUtil.setContentView(this, R.layout.activity_main)
    }

    fun btnClick(view: View){
        Toast.makeText(this,"Button", Toast.LENGTH_LONG).show()
    }
}

그 후 MainActivity에 다음과 같이 작성해준다. 

xml의 변수를 참조하고 싶을 경우 binding 뷰이름으로 불러올 수 있다. 

우리는 예시로 버튼 클릭 이벤트를 구현할 것이라 btnClick 함수도 정의하였다. 

데이터바인딩에서는 단순 클릭 함수만 만들어 놓고 이 함수를 쓰는지에 대해서는 xml에서 설정해준다.

 

4.

   <data>
        <variable
            name="activity"
            type="com.example.mvvmexample.MainActivity" />
    </data>

그 후 xml 파일의 <data> 태그 안에 다음과 같이 작성해준다. 이때 type는 해당 경로를 의미한다.

 

5.

<Button
            android:id="@+id/sample"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Hello World!"
            android:onClick="@{activity::btnClick}"
            />

기존 코드에서 onclick 속성을 추가해준다.  Listener를 사용해서 이벤트를 연결하기 위해서 설정한 것이다.

 6.

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

binding.activity를 통해서 변수에 MainActivity를 넣어준다.

 

 

'Frontend > Kotlin' 카테고리의 다른 글

Coroutine 개념  (0) 2023.08.04
MVVM 패턴 적용기(1)  (0) 2023.07.29
[안드로이드] 코틀린 아키텍처 패턴  (0) 2023.07.21
Unit 7  (0) 2023.01.22
Unit 7-2(데이터 베이스 프로그램) 강의정리  (0) 2023.01.21