데이터바인딩이란?
데이터 바인딩은 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 |