Notice
Recent Posts
Recent Comments
Link
«   2024/09   »
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
Tags more
Archives
Today
Total
관리 메뉴

난 정말 최고야 멋있어

안드로이드 데이터 바인딩 본문

카테고리 없음

안드로이드 데이터 바인딩

n00bh4cker 2020. 5. 11. 13:05

https://developer.android.com/topic/libraries/data-binding?hl=ko

 

데이터 결합 라이브러리  |  Android 개발자  |  Android Developers

데이터 결합 라이브러리   Android Jetpack의 구성요소 데이터 결합 라이브러리는 프로그래매틱 방식이 아니라 선언적 형식으로 레이아웃의 UI 구성요소를 앱의 데이터 소스와 결합할 수 있는 지원 라이브러리입니다. 레이아웃은 흔히 UI 프레임워크 메서드를 호출하는 코드가 포함된 활동에서 정의됩니다. 예를 들어 아래 코드는 findViewById()를 호출하여 TextView 위젯을 찾아 viewModel 변수의 userName 속성에 결합합니다. K

developer.android.com

0. 왜 데이터 바인딩?

findViewById같은 경우는 호출할때마다 뷰 하이어라키를 순회하는 매우 비싼 작업 ㅜㅜ

데이터 바인딩을 사용하면 컴파일 타임에 미리 결정을 하기 때문에 복잡한 UI를 가진 경우 더 빠른 성능을 낼 수 있다

(대신 빌드 시간은 길어지겠죠 아마도..)

 

1. 모듈수준의 build.gradle 수정

dataBinding{
	enabled = true
}

 

2. xml 레이아웃 수정

- 전체를 <layout>~</layout> 으로 감싸고 루트뷰의 스키마 옮기기

- 데이터 클래스를 추가하고 싶다면 data > variable 요소 추가 name 속성에는 xml에서 사용할 이름, type 속성엔 클래스의 경로를 적어주면 된다 ( data를 기존의 루트 뷰와 동일한 레벨으로 해주세요)

- 데이터 클래스의 요소의 값으로 할당하기 위해 "@{xxx.yyyy}" 이런식으로 값을 할당해주면 됨

 

3. 액티비티 코드 수정

    lateinit var binding : ActivityMainBinding //바인딩 객체
    private val data : SthData = SthData("Example")
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        binding = DataBindingUtil.setContentView(this,R.layout.activity_main)
        // 위의 코드랑 밑의 코드랑 같은 코드임
        // binding = ActivityMainBinding.inflate(layoutInflater)
        // setContentView(binding.root)
    }

 

바인딩 클래스의 경우 "파스칼케이스 + Binding "으로 명명된다 ex)activity_main.xml -> ActivityMainBinding

그 이후 binding 의 요소에 접근하는 식으로 기존의 findViewById로 했던 작업들을 동일하게 할 수 있다

*바인딩의 요소들은 카멜케이스로 명명된다

ex ) binding.textView1.text = "Hello Binding"