일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
31 |
- 사무실
- Android
- innernavigation
- 패파
- MVVM
- 공유오피스
- 코틀린
- 안드로이드
- 백준
- 너무 어렵다
- 아키텍쳐
- 내부프레그먼트
- SAA
- 파이썬
- 알고리즘
- 중첩네비게이션
- 가든웨딩
- media3
- 자바
- media3 transformer
- 스택
- Kotlin
- 재밌긴함
- 패스트파이브
- 더베일리하우스 삼성점
- 후기
- Stack
- rxandroid
- fragmentcontainer
- parentfragment
삽질도사
[안드로이드] rxjava로 실시간 검색기능 만들기(debounce) 본문
일단 dependencies추가하고 sync합니다.
dependencies {
implementation 'io.reactivex.rxjava3:rxandroid:3.0.0'
implementation 'io.reactivex.rxjava3:rxjava:3.0.7'
implementation 'com.jakewharton.rxbinding4:rxbinding:4.0.0'
}
rxjava를 활용해서 xml의 EditText를 관찰하기 위해 RxAndroidUtils라는 클래스를 하나 생성해줍니다.
public class RxAndroidUtils {
private static final String RXTAG = RxAndroidUtils.class.getSimpleName();
private static RxAndroidUtils instance;
private RxAndroidUtils(){}
public static RxAndroidUtils getInstance(){
if(instance == null)
instance = new RxAndroidUtils();
return instance;
}
public Observable<String> getEditTextObservable(EditText editText){
return RxTextView.textChanges(editText).map(charSequence -> charSequence.toString());
}
public String getTAG(){
return RXTAG;
}
}
이후에 원하는 main에서 Disposable을 하나 생성하고(나중에 옵져버블 버릴려고)
debounce로 약간의 딜레이를 주고(안그러면 타이핑하기 전에 계속 검색됨)
subscribe에서 원하는 기능을 구현하면 됩니다.
private Disposable ET_Observable_Disposable;
Observable<String> editTextObservable =
RxAndroidUtils.getInstance().getEditTextObservable(binding.searchET);
ET_Observable_Disposable = editTextObservable
.debounce(500, TimeUnit.MILLISECONDS) //디바운스로 500만큼 검색딜레이
.observeOn(AndroidSchedulers.mainThread())
.subscribe(s->{ //EditText의 내용을 s로 받아온 겁니다.
/////////////////////////////////////////////////////////////원하는 기능추가
Log.d(RxAndroidUtils.getInstance().getTAG(),s);
if(s.length() >= 2) {
Loaded_Posts.clear();
adapter.NoMore_Load(true);
KeyWord = s;
Search(KeyWord);
}
else if(s.length() == 1){
Toast.makeText(this,"두 글자 이상 적어주세요.",Toast.LENGTH_SHORT).show();
}
/////////////////////////////////////////////////////////////
});
이후에 activity가 onDestroy되면 아까 만든 Disposable로 observable을 제거해줍니다.
@Override
protected void onDestroy() {
super.onDestroy();
ET_Observable_Disposable.dispose();
}
그러면 아래처럼 됩니다!
참고블로그:
https://taehyungk.github.io/posts/android-RxJava2-Disposable/
[RxJava2] Disposable - 메모리 누수를 막아보자
Disposable
taehyungk.github.io
https://onlyfor-me-blog.tistory.com/415
[Rxjava] Disposable이란? CompositeDisposable이란?
Rxjava는 데이터를 발행하는 생산자, 발행된 데이터를 받아 처리하는 소비자로 나눠진 형태로 구성된 Reactive Streams를 바탕으로 하는 라이브러리다. 또한 옵저버 패턴을 확장해서 관찰 대상 객체의
onlyfor-me-blog.tistory.com
https://black-jin0427.tistory.com/74
[Android, RxBinding] RxBinding 사용기
안녕하세요. 블랙진입니다. 이번에는 RxBinding 사용법에대해 간단히 소개해 보겠습니다. 아주 Simple 하게 EditText 를 만들고 그 내용을 TextView 에 바로바로 표시하는 예제입니다. 1. app - build.gradle 에.
black-jin0427.tistory.com
https://terry-some.tistory.com/48
RxJava를 사용한 Debounce 구현
이번 포스트에서는 RxJava를 사용하여 간단하게 EditText에 Debounce를 구현하는 시간을 가져보도록 하겠습니다. 우선 시작하기에 앞서 Debounce가 무엇인지 알아보고 가도록 하겠습니다. Debounce vs. Thrott
terry-some.tistory.com
https://selfish-developer.com/entry/RxJava-Observable-Observer
RxJava - Observable, Observer
좀더 리액티브한(reactive) UI를 만들기 위해서 프로젝트에 RxJava, RxAndroid를 도입하면서 가장 어려웠던 점은 Observable과 Observer 클래스를 개념적으로 이해하는 것이었다. 옵저버 패턴을 응용한 라
selfish-developer.com