DataBinding
TLOVER라는 앱을 론칭하면서 DataBinding을 계속 사용해왔고,
블로그에도 개념을 정리했었지만 강의를 들으면서 부족했던 부분을 보완하고
그 부분들을 정리하고자 한다.
databinding ?
이름 처럼 데이터를 연결, 결합 해줄 수 없을까? 라고 생각해보면 된다.
viewbinding을 사용했을 때 해당 뷰에 있는 id에 접근해서 값을 변경해주었다.
하지만 서버에서 받은 많은 데이터들을 활용하여 값을 변경해줄 때는
binding을 통하여 데이터를 한 번에 저장한다음 xml에서 변경하면 편리할 것이다!!!
바로 databinding을 사용하면 된다!
1. gradle 파일에 다음과 같이 작성하자
buildFeatures{
dataBinding = true
}
2. xml파일안에 있는 최상단레이아웃을 다음과 같이 <layout>태그로 감싸주고, <data>태그를 통해 해당 데이터 패키지 주소를 적어준다.
<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>
<variable
name="person"
type="com.example.databindingdataclass.Person" />
</data>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
3. 해당 클래스에서 데이터바인딩을 사용할 준비를 한다.
private lateinit var binding : ActivityMainBinding
binding = DataBindingUtil.setContentView(this, R.layout.activity_main)
//데이터 결합
val person=Person("윤성식", 25)
binding.person = person
4. 데이터클래스를 생성한다.
data class Person (
val name : String,
val age : Int
)
5. 해당 xml파일에서 데이터결합된 name : person을 가지고 접근한다.
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{person.name}"
android:textSize="50sp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{Integer.toString(person.age)}"
android:textSize="50sp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{person.age > 30 ? `나이많음` : `나이적음`}"
android:textSize="50sp" />
여기서 주의해야할 점이 있다!!
위의 데이터클래스를 보면 age는 Int형태로 되어있다.
하지만 xml파일에서는 text이기 때문에 .toString을 통해서 문자열로 바꾸어 주었다!
또한, age에 대한 조건 값도 xml파일에서 위처럼 설정할 수 있다.
대신 저 나이많음을 감싸고 있는 것은 작은따옴표가 아닌 백틱(`)을 사용해야한다
'Android > JETPACK' 카테고리의 다른 글
[JETPACK개론] Activity/Fragment 의 ViewModel 공유 (0) | 2022.08.12 |
---|---|
[JETPACK개론] ViewModel ? (0) | 2022.08.11 |
[JETPACK개론] View,DataBinding + Adapter (0) | 2022.08.10 |
[JETPACK개론] ViewBinding (0) | 2022.07.24 |
[JETPACK개론] 들어가며 (0) | 2022.07.23 |