관리 메뉴

막내의 막무가내 프로그래밍 & 일상

[안드로이드] 코틀린 @BindingAdapter 매개변수 두 개 이상할 경우 예시 본문

안드로이드/코틀린 & 아키텍처 & Recent

[안드로이드] 코틀린 @BindingAdapter 매개변수 두 개 이상할 경우 예시

막무가내막내 2020. 4. 5. 19:21
728x90

 

[2021-04-13 업데이트]

 

 

https://developer.android.com/topic/libraries/data-binding/binding-adapters

 

결합 어댑터  |  Android 개발자  |  Android Developers

결합 어댑터는 적절한 프레임워크를 호출하여 값을 설정하는 작업을 담당합니다. 한 가지 예로 setText() 메서드를 호출하는 것과 같이 속성 값을 설정하는 작업을 들 수 있습니다. 또 다른 예로는 setOnClickListener() 메서드를 호출하는 것과 같이 이벤트 리스너를 설정하는 작업이 있습니다. 데이터 결합 라이브러리를 사용하면 값을 설정하기 위해 호출되는 메서드를 지정하고 고유한 결합 로직을 제공하며 어댑터를 사용함으로써 반환된 객체의 유형을

developer.android.com

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

 

결합 어댑터  |  Android 개발자  |  Android Developers

결합 어댑터는 적절한 프레임워크를 호출하여 값을 설정하는 작업을 담당합니다. 한 가지 예로 setText() 메서드를 호출하는 것과 같이 속성 값을 설정하는 작업을 들 수 있습니다. 또 다른 예로는 setOnClickListener() 메서드를 호출하는 것과 같이 이벤트 리스너를 설정하는 작업이 있습니다. 데이터 결합 라이브러리를 사용하면 값을 설정하기 위해 호출되는 메서드를 지정하고 고유한 결합 로직을 제공하며 어댑터를 사용함으로써 반환된 객체의 유형을

developer.android.com

 

기록용으로 남깁니다.

 

리사이클러뷰에서 사용한 경우 입니다. 더 불러오기 인지에 따른 분기처리 용으로 사용했습니다. (나중에 loadMore 가 필요 없는 로직으로도 되서 이후에는 그냥 없에주긴 했습니다.)

@BindingAdapter("setItems")
fun RecyclerView.setAdapterItems(items: List<Movie>?) {
    with((adapter as MovieAdapter)) {
        this.clear()
        items?.let { this.addItems(it) }
    }
}

 

 

예시

@BindingAdapter("setItems", "loadMore")
fun RecyclerView.setAdapterItems(items: List<Movie>?, loadMore: Boolean) {
    with((adapter as MovieAdapter)) {
        if (!loadMore) {
            this.clear()
        }
        this.clear()
        items?.let { this.addItems(it) }
    }
}
<androidx.recyclerview.widget.RecyclerView
            android:id="@+id/rv_movies"
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:clipToPadding="false"
            android:orientation="vertical"
            app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@id/guideline"
            bind:endlessScroll="@{vm}"
            bind:loadMore="@{vm.loadMore}"
            bind:setItems="@{vm.movieList}" />

 

bind:endlessScroll 은 별개지만 무한스크롤 용으로 사용했었습니다.

@BindingAdapter("endlessScroll")
fun RecyclerView.setEndlessScroll(
    viewModel: MovieSearchViewModel
) {
    val scrollListener =
        object : EndlessRecyclerViewScrollListener(layoutManager as LinearLayoutManager) {
            override fun onLoadMore(page: Int, totalItemsCount: Int, view: RecyclerView?) {
                viewModel.requestPagingMovie(totalItemsCount + 1)
            }
        }
    this.addOnScrollListener(scrollListener)
}

 

이 밖에 다른 BindingAdapter 예제를 다음 링크에 포스팅 해놨으니 참고해주세요 :)

youngest-programming.tistory.com/473

 

[안드로이드] 데이터바인딩 어댑터 (DatabindingAdapter) 및 확장함수 모음 정리

이전 프로젝트에서 본인이 사용했던 바인딩 어댑터나 확장함수를 막무가내로 일단 기록해놓는 공간입니다. [2021-01-07] 일단 사용했던 것들 중 몇개만 기록해 놓습니다. [확장함수] 시간변환 관련

youngest-programming.tistory.com

 

 

댓글과 공감은 큰 힘이 됩니다. 감사합니다. !!!

 

 

728x90
Comments