BindingAdapter
- 속성 값을 설정하거나 이벤트 리스너를 설정하는 것처럼 View(xml 레이아웃)의 attribute를 정의하고 로직을 작성하는 데 사용된다.
- Android의 기본 UI들은 대부분 이미 정의된 BindingAdapter가 있습니다.
- BindingAdapter를 사용하려면 DataBinding을 사용하기 위한 세팅이 되어 있어야 합니다.
DataBinding on View
- Binding에서는 LifecycleOwnwer와 ViewModel 변수를 초기화 할 필요가 있다.
BindingAdapter 적용
@BindingAdapter("bindData")
fun bindRecyclerView(
recyclerView: RecyclerView?,
data: ArrayList<Document>?
) {
val adapter = recyclerView?.adapter as MainSearchRecyclerViewAdapter
data?.forEach {
adapter.addPersonItem(it.doc_url)
}
adapter.notifyDataSetChanged()
}
- 첫번째 변수는 속성을 사용할 View 입니다.
- 두번째 변수는 BindingAdapter의 로직에 사용될 Parameter 입니다.
XML에 적용
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/main_activity_search_recycler_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clipToPadding="false"
android:paddingTop="12dp"
android:paddingBottom="12dp"
bindData="@{model.personData}"/>
ViewModel 로직
// MainViewModel.kt
private val _personData = MutableLiveData<ArrayList<Document>>()
val personData: LiveData<ArrayList<Document>>
get() = _personData
- 리스트로 나타날 데이터를 레이아웃에 출력하기 위해 해당 데이터를 ViewModel에 담습니다.
- 뷰모델의 LiveData가 데이터 변경을 감지하면 bindData가 작동합니다.