일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 아비투스
- 1일1커밋
- 좌식테이블
- 끝말잇기
- 베드트레이
- 테트리스
- 브런치작가되기
- 프래그먼트
- 목적중심리더십
- 자취필수템
- 목적 중심 리더십
- 지지않는다는말
- 한달브런치북만들기
- 한단어의힘
- 슬기로운 온라인 게임
- 재택근무
- 한달어스
- T자형인재
- 한달독서
- 커스텀린트
- 베드테이블
- 리얼하다
- 소프시스
- 북한살둘레길
- 소프시스 밤부 좌식 엑슬 테이블
- 면접
- 어떻게 나답게 살 것인가
- 함수형 프로그래밍
- 안드로이드
- 캐치마인드
- Today
- Total
정상에서 IT를 외치다
[Android, RxBinding] RxBinding 사용기 본문
안녕하세요. 블랙진입니다.
이번에는 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 들은 리액티브하게 작업을 해보시면서 즐코 하시기 바랍니다.~!
'안드로이드' 카테고리의 다른 글
[Android, operator] Kotlin 연산자 operator 에 대하여 (0) | 2018.08.08 |
---|---|
[Android, Databinding] 데이터 바인딩 라이브러리 사용기 (0) | 2018.08.07 |
[Android, fromHtml] textview 에서 문자 일부 수정 하기 (0) | 2018.08.01 |
[Android, keyhash] 해시 키값 가져오기 (0) | 2018.07.18 |
[Android, InputMathodManager] 안드로이드 키보드 보이고 숨기기 (0) | 2018.07.17 |