private void setOnQuenyTextChangeListener() { RxSearchView.queryTextChangeEvents(searchView) .throttleLast(100, TimeUnit.MILLISECONDS) .debounce(300, TimeUnit.MILLISECONDS) .as(this.bindAutoDispose()) .subscribe(searchViewQueryTextEvent -> { final String keyWord = searchViewQueryTextEvent.queryText() + ""; Log.d(TAG, "accept: " + keyWord); if (searchViewQueryTextEvent.isSubmitted()) { searchView.clearFocus(); initSearchLayout(keyWord);
/** * Determine if the scroll event at the end of the recycler view. * @return true if at end of linear list recycler view, false otherwise. */ public boolean isAtScrollEnd() { RecyclerView.LayoutManager layoutManager = recyclerViewScrollEvent.view().getLayoutManager(); if (layoutManager instanceof LinearLayoutManager) { LinearLayoutManager linearLayoutManager = (LinearLayoutManager) layoutManager; int totalItemCount = linearLayoutManager.getItemCount(); int lastVisibleItem = linearLayoutManager.findLastVisibleItemPosition(); return totalItemCount <= (lastVisibleItem + 2); } else { return false; } } }
private void activateEndlessScroll(RecyclerView recyclerView, GridLayoutManager manager) { RxRecyclerView.scrollEvents(recyclerView) .subscribe(scrollEvent -> { visibleItemCount = recyclerView.getChildCount(); totalItemCount = manager.getItemCount(); firstVisibleItem = manager.findFirstVisibleItemPosition(); if (loading) { if (totalItemCount > previousTotal) { loading = false; previousTotal = totalItemCount; } } if (!loading && (totalItemCount - visibleItemCount) <= (firstVisibleItem + visibleThreshold)) { pageNum++; presenter.loadMoviesList(getContext(), pageNum, false); loading = true; } }); }
@Test public void isAtScrollEnd() throws Exception { // //Arrange // LinearLayoutManager mockLinearLayoutManager = Mockito.mock(LinearLayoutManager.class); RecyclerView mockRecyclerView = Mockito.mock(RecyclerView.class); RecyclerViewScrollEvent mockRecyclerViewScrollEvent = Mockito.mock(RecyclerViewScrollEvent.class); when(mockLinearLayoutManager.getItemCount()).thenReturn(50); when(mockLinearLayoutManager.findLastVisibleItemPosition()).thenReturn(50); when(mockRecyclerView.getLayoutManager()).thenReturn(mockLinearLayoutManager); when(mockRecyclerViewScrollEvent.dx()).thenReturn(0); when(mockRecyclerViewScrollEvent.dy()).thenReturn(100); when(mockRecyclerViewScrollEvent.view()).thenReturn(mockRecyclerView); // //Act // ScrollEventCalculator scrollEventCalculator = new ScrollEventCalculator(mockRecyclerViewScrollEvent); boolean value = scrollEventCalculator.isAtScrollEnd(); // //Assert // assertThat(value).isTrue(); }
@SuppressLint("CheckResult") private void initSearchView() { RxSearchView.queryTextChangeEvents(mSearchView) .throttleLast(100, TimeUnit.MILLISECONDS) .debounce(300, TimeUnit.MILLISECONDS) .observeOn(AndroidSchedulers.mainThread()) .subscribe(searchViewQueryTextEvent -> { String keyWord = searchViewQueryTextEvent.queryText().toString(); if (searchViewQueryTextEvent.isSubmitted()) { mSearchView.clearFocus();
@Test public void isAtScrollEnd_false() throws Exception { // //Arrange // LinearLayoutManager mockLinearLayoutManager = Mockito.mock(LinearLayoutManager.class); RecyclerView mockRecyclerView = Mockito.mock(RecyclerView.class); RecyclerViewScrollEvent mockRecyclerViewScrollEvent = Mockito.mock(RecyclerViewScrollEvent.class); when(mockLinearLayoutManager.getItemCount()).thenReturn(50); when(mockLinearLayoutManager.findLastVisibleItemPosition()).thenReturn(5); when(mockRecyclerView.getLayoutManager()).thenReturn(mockLinearLayoutManager); when(mockRecyclerViewScrollEvent.dx()).thenReturn(0); when(mockRecyclerViewScrollEvent.dy()).thenReturn(100); when(mockRecyclerViewScrollEvent.view()).thenReturn(mockRecyclerView); // //Act // ScrollEventCalculator scrollEventCalculator = new ScrollEventCalculator(mockRecyclerViewScrollEvent); boolean value = scrollEventCalculator.isAtScrollEnd(); // //Assert // assertThat(value).isFalse(); }
scrollDisposable = RxRecyclerView.scrollEvents(nowPlayingBinding.recyclerView)