정상에서 IT를 외치다

[Android, RxBinding] RxBinding 사용기 본문

안드로이드

[Android, RxBinding] RxBinding 사용기

Black-Jin 2018. 8. 7. 16:07
반응형

안녕하세요. 블랙진입니다.


이번에는 RxBinding 사용법에대해 간단히 소개해 보겠습니다.


아주 Simple 하게 EditText 를 만들고 그 내용을 TextView 에 바로바로 표시하는 예제입니다.



1.  app - build.gradle 에 라이브러리를 추가합니다. (rxBindingVersion = '2.0.0')


implementation "com.jakewharton.rxbinding2:rxbinding-appcompat-v7:$rxBindingVersion"



2. xml 에 EditText 와 TextView 를 생성해 줍니다.

<LinearLayout
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content">

<EditText
android:id="@+id/etActivity"
android:textSize="20dp"
android:textColor="#000000"
android:layout_width="match_parent"
android:layout_height="50dp" />

<TextView
android:id="@+id/tvActivity"
android:textSize="20dp"
android:textColor="#000000"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />

</LinearLayout>



3.  Activity 에서 RxTextView 를 선언하여 EditText 를 연결하면 됩니다.

RxTextView.textChanges(etActivity)
.subscribe {
tvActivity.text = it
}

etActivity 는 EditText 의 변수 이고 tvActivity 는 TextView 의 변수 입니다.


 EditText 의 변수를 RxTextView 에 넣어주어 subscribe 으로 원하는 동작을 설정할 수 있습니다.




4. filter 와 map 기능을 사용한 경우

RxTextView.textChanges(etActivity)
// editText 의 내용이 있는지 없는지 확인합니다.
.filter { it.isNotEmpty() }
// editText 의 입력된 글자를 가져와서 변경합니다.
.map { it.toString() + " -> 입니다. " }
.subscribe {
tvActivity.text = it
}


위와 같이 설정하면 EditText 에 입력한 글에 자동으로 " -> 입니다. " 가 붙여져서 TextView 에 출력하는 놀라운! 경험을 하실 수 있을 겁니다.



5. RxBInding 관리하기


RxView 들을 계속 구독상태로 두면 메모리 사용을 효율적으로 할 수 없습니다. 해당 Activity 가 사라졌을 경우 구독 해제를 해주셔야 효율적인 Rx 를 사용하실 수 있습니다. 그러기 위해 뷰 디스포저블을 별도로 생성하여 관리 하도록 합니다.


val viewDisposables = CompositeDisposable()

위 변수를 EditText 와 TextView 가 있는 Class 에 생성해 줍니다. 


viewDisposables.add(RxTextView.textChanges(etActivity)
.subscribe {
tvActivity.text = it
})

viewDisposables 에 RxView 를 추가하여 관리하도록 합니다.


override fun onStop() {
super.onStop()
// 엑티비티가 완전히 종료되고 있는 경우에만 관리하고 있는 디스포저블을 해제합니다.
// 화면이 꺼지거나 다른 엑티비티를 호출하여 엑티비티가 화면에서 사라지는 경우에는 해제하지 않습니다.
if(isFinishing) {
viewDisposables.clear()
}
}

onStop 에서는 위 설명과 같이 엑티비티가 사라지면 viewDisposables 에 구독되어 있는 RxView 들을 삭제해 줍니다.





ps) 깔끔한 RxBinding 을 위한 방법!


코틀린 익스텐션을 사용하는 개발자분 께서는 아래와 같이 


implementation "com.jakewharton.rxbinding2:rxbinding-appcompat-v7-kotlin:$rxBindingVersion"


'-kotlin' 을 추가하여 rxBinding 을 라이브러리에 추가해줍니다.


그러면 RxTextView 에 etActivity 를 변환해줄 필요없이


viewDisposables.add(etActivity.textChanges()
.subscribe {
tvActivity.text = it
})

바로 etAcitivty 를 RxView 로 사용할 수 있습니다.~@@


@참고자료 : '커니의 코틀린'



그럼 RxBInding 으로 다양한 View 들은 리액티브하게 작업을 해보시면서 즐코 하시기 바랍니다.~!

반응형
Comments