아니? view바인딩 이 끝이 아니였어?? 하겠지만!
그건 순전 view만을 바인딩 하는 방법이고
내부에서 view와 데이터 상호작용을 하기 위한 DataBinding에 대해서도 알아보자!
안드로이드 module수준 gradle에 추가
dataBinding {
enabled = true
}
이후, xml을 보면 xml 코드는
<layout 태그안에 레이아웃을 작성해야한다.
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<data>
<variable
name="viewmodel"
type="com.myapp.data.ViewModel" />
</data>
<ConstraintLayout... /> <!-- UI layout's root element -->
</layout>
<span태그에는 결합변수를 정해주어 name= 에는 xml에 대한 이름 type= 에는 XML이 사용될 activity,fragment 등에 대한 장소를 나타냅니다.
XML에서 사용할 준비가 되었다면 type에서 정해준 경로로 넘어가 activity를 작성해준다
class Example: AppCompatActivity() {
private lateinit var binding: LoginMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = DataBindingUtil.setContentView(this, R.layout.login_main)
}
}
여기까지가 적용 방법이고 이제 우리는 DataBinding을 잘 써먹을 줄 알아야한다!!
안드로이드에서는 xml을 동적으로 사용할 수가 있다! 이는 activity에서 TextView에 내가 원하는 text를 넣는 다던지 ImageView에 내가 원하는 img를 넣는다던지.. 우리가 그런 것들을 하기 위해선 코틀린의 Data Class 를 사용할 수도 있고 onClick 함수자체를 선언해서 사용할수도 있다 방법은 다양하기에 기본적인 틀을 알아보자!
간단한 예제)
xml - 에서는 사용하고싶은 data 클래스를 참조변수를 통해 설정해주고 @{} 를 통해 text를 변경 시켜줄 수 있다
data class LoginData(
val id = "user_1"
)
<data>
<variable
name="login"
type="com.dataclass.LoginData" />
</data>
<androidx.constraintlayout.widget.ConstraintLayout
...
<androidx.appcompat.widget.AppCompatTextView
...
android:text="@{login.id}"
...
</androidx.constraintlayout.widget.ConstraintLayout>
activity에서 data 클래스에 데이터만 선언해준다면 text는 잘 나올 것이다