경험의 기록

※ DataBinding 이란?

  • 데이터와 뷰를 연결하는 작업을 레이아웃에서 처리 할 수 있게 해주는 라이브러리

 

 findViewById<TextView>(R.id.sample_text).apply {
        text = viewModel.userName
    }

예를들어, textView에 뷰모델에서 가져온 유저네임을 가져오는 코드를

 

<TextView
        android:text="@{viewmodel.userName}" />

레이아웃에서 직접 결합할 수 있게 된다.

 

파일이 더욱 단순화 되어 유지관리가 쉬워지고 메모리 누수 방지, null 위험을 방지할 수 있는 장점이 있다.

 

 

사용해보기

buildFeatures {
            dataBinding true
        }

bulid.gradle (Module)  android에 추가해준다.

 

그 후 기존 xml 코드를

 

layout이 감싸고 연결데이터를 표시하는 data 가 있는 형태로 바꿔줘야 한다.이 과정은 직접 해도되지만

 

 

기존 레이아웃에서 ALT + ENTER 를 누른 후 Convert하면 자동으로 바꿔준다.

 

data class User(val firstName: String, val lastName: String)

그 후 예시로 User 데이터 클래스를 만들어 준다.

 

 

xml에서 variable에 아까 만든 데이터클래스를 연결하고

텍스트를 설정해준다. 레이아웃 내의 표현식은 @{} 구문으로 작성한다.

 

package org.techtown.databinding

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import androidx.databinding.DataBindingUtil
import org.techtown.databinding.databinding.ActivityMainBinding

class MainActivity : AppCompatActivity() {
    // lateinit 사용
    private lateinit var binding : ActivityMainBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        // binding class 인스턴스 생성
        binding = DataBindingUtil.setContentView(this,R.layout.activity_main)
        binding.user = User("Yeop","Han")
    }
}

 

viewBinding 와 마찬가지로 DataBinding을 사용 설정하게 되면,

각 XML 파일 마다 바인딩 클래스가 자동으로 생성된다. ViewBinding과 차이점은 뷰에 대한 정보와 함께 <data>에 정의된 정보도 포함하는 것의 차이가 있다.

 

 

바인딩이 잘 된것을 확인할 수 있다.

 

 

 

package org.techtown.databinding

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import androidx.databinding.DataBindingUtil
import org.techtown.databinding.databinding.ActivityMainBinding

class MainActivity : AppCompatActivity() {
    // lateinit 사용
    private lateinit var binding : ActivityMainBinding

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        // binding class 인스턴스 생성
        binding = ActivityMainBinding.inflate(layoutInflater)
        val view = binding.root
        setContentView(view)
        binding.user = User("Yeop","Han")
    }
}

또한 ViewBinding을 할때처럼 사용해도 오류없이 동작한다.

 

github.com/HanYeop/AndroidStudio-Practice/tree/master/DataBinding

 

HanYeop/AndroidStudio-Practice

AndroidStudio Practice. Contribute to HanYeop/AndroidStudio-Practice development by creating an account on GitHub.

github.com

 

 

 

참조

developer.android.com/topic/libraries/data-binding/expressions

 

 

 

 

 

반응형

공유하기

facebook twitter kakaoTalk kakaostory naver band
loading