android Flow Binding

주은호·2024년 4월 16일
0
post-thumbnail

설명및 사용이유

  • RxBinding에서 영감을 받아 제작된 Flow 기반 RX(Coroutine Flow)Library
  • 콜드 스트림을 지원
  • 흐름을 수집할때 즉시 보낼지 여부를 제어가능
  • Material에서 제공하는 datePicker, slider등에 바인딩이 추가됨 추후 더 추가될것으로보임
  • lifecycleScope내에서 launchIn을 하게 되면 AndroidX Lifecycle에서 제공하는 기능을 활용가능, 즉 메소드에서 리스너를 등록, 취소, 제거할 필요 없음
  • 중복클릭이나 리사이클러뷰 클릭처리할때 좋을듯 함

implementation

Flow Binding 깃허브 링크
FlowBinding 문서

def flowbinding_version = "1.2.0"

// 플랫폼 바인딩
implementation "io.github.reactivecircus.flowbinding:flowbinding-android:${flowbinding_version}"

// android X 바인딩
implementation "io.github.reactivecircus.flowbinding:flowbinding-activity:${flowbinding_version}"
implementation "io.github.reactivecircus.flowbinding:flowbinding-appcompat:${flowbinding_version}"
implementation "io.github.reactivecircus.flowbinding:flowbinding-core:${flowbinding_version}"
implementation "io.github.reactivecircus.flowbinding:flowbinding-drawerlayout:${flowbinding_version}"
implementation "io.github.reactivecircus.flowbinding:flowbinding-lifecycle:${flowbinding_version}"
implementation "io.github.reactivecircus.flowbinding:flowbinding-navigation:${flowbinding_version}"
implementation "io.github.reactivecircus.flowbinding:flowbinding-preference:${flowbinding_version}"
implementation "io.github.reactivecircus.flowbinding:flowbinding-recyclerview:${flowbinding_version}"
implementation "io.github.reactivecircus.flowbinding:flowbinding-swiperefreshlayout:${flowbinding_version}"
implementation "io.github.reactivecircus.flowbinding:flowbinding-viewpager:${flowbinding_version}"
implementation "io.github.reactivecircus.flowbinding:flowbinding-viewpager2:${flowbinding_version}"

// material componetn binding
implementation "io.github.reactivecircus.flowbinding:flowbinding-material:${flowbinding_version}"

예제

with(binding){
	// 버튼 처리
	btnEnroll
    	.click()
        .onEach{
        	// 버튼 클릭되었을때
        }
        .dedounce(500L) // 클릭이 실행되고 0.5초딜레이
        .launchIn(lifecycleScope)
        
    // 텍스트 처리
    etMypageKg
        .textChanges()
        .onEach { text ->
        	// 텍스트 처리   
        }
        .launchIn(lifecycleScope)    
        
}

viewModel에 작업을 보낼때 한꺼번에 처리

참고 링크

private fun subscribeUI() {
    merge(
        binding.loginButton.clicks().map { Action.WelcomeAction.SelectLogin },
        binding.homeButton.clicks().map { Action.WelcomeAction.SelectHome },
        binding.registerButton.clicks().map { Action.WelcomeAction.SelectRegister }
    )
        .onEach { viewModel.actions.offer(it) }
        .launchIn(lifecycleScope)
}
profile
EUNHO's STROY

0개의 댓글