JakeWharton / RxBinding

RxJava binding APIs for Android's UI widgets.
Apache License 2.0
9.68k stars 971 forks source link

RxView not emitting focusChanges for SearchViews #382

Open neteinstein opened 7 years ago

neteinstein commented 7 years ago
Observable<Boolean> mSearchFocusObs = RxView
                .focusChanges(mViewBuilder.getSearchView())
                .share();

DisposableObserver<Boolean> mSearchStateDisposable = mSearchFocusObs
                .observeOn(AndroidSchedulers.mainThread())
                .subscribeWith(getSearchFocusObserver());

private DisposableObserver<Boolean> getSearchFocusObserver() {
        return new DisposableObserver<Boolean>() {
            @Override
            public void onNext(Boolean isFocused) {
                Log.d("Test", "getSearchFocusObserver", "Focus? " + isFocused);

            }

            @Override
            public void onError(Throwable e) {
                Log.e("Test", "getSearchFocusObserver", "Error doing search");
            }

            @Override
            public void onComplete() {
                Log.d("Test", "getSearchFocusObserver", "Focus!!!");
            }
        };
    }

This is being called only once, when the Activity is opened:

D/TestApplication: TestActivity getSearchFocusObserver Focus? false

After it's never called.

For what I digged, it's due to SearchView not reacting correctly to mySearchView.setOnFocusChangeListener()

but only to

mySearchView.setOnQueryTextFocusChangeListener()

So my suggestion would be to either validate the type of View and then use the different method.. or have RxSearchView binding with focus option.

tallnato commented 7 years ago

+1