@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Item item = getIntent().getParcelableExtra(EXTRA_ITEM); if (item == null) { finish(); return; } supportRequestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.activity_thread_preview); setSupportActionBar((Toolbar) findViewById(R.id.toolbar)); //noinspection ConstantConditions getSupportActionBar().setDisplayOptions(ActionBar.DISPLAY_SHOW_HOME | ActionBar.DISPLAY_SHOW_TITLE | ActionBar.DISPLAY_HOME_AS_UP); RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recycler_view); recyclerView.setLayoutManager(new SnappyLinearLayoutManager(this, false)); recyclerView.addItemDecoration(new CommentItemDecoration(this)); recyclerView.setAdapter(new ThreadPreviewRecyclerViewAdapter(mItemManager, item)); mKeyDelegate.setScrollable( new KeyDelegate.RecyclerViewHelper(recyclerView, KeyDelegate.RecyclerViewHelper.SCROLL_ITEM), null); }
@Test public void testScrollToNextPage() { when(adapter.getItemCount()).thenReturn(10); when(layoutManager.findLastCompletelyVisibleItemPosition()).thenReturn(8); helper = new KeyDelegate.RecyclerViewHelper(recyclerView, KeyDelegate.RecyclerViewHelper.SCROLL_PAGE); assertTrue(helper.scrollToNext()); verify(recyclerView).smoothScrollToPosition(eq(9)); when(layoutManager.findLastCompletelyVisibleItemPosition()).thenReturn(9); assertFalse(helper.scrollToNext()); }
@Test public void testScrollToPreviousItem() { when(adapter.getItemCount()).thenReturn(10); when(layoutManager.findFirstVisibleItemPosition()).thenReturn(5); helper = new KeyDelegate.RecyclerViewHelper(recyclerView, KeyDelegate.RecyclerViewHelper.SCROLL_ITEM); assertTrue(helper.scrollToPrevious()); verify(recyclerView).smoothScrollToPosition(eq(4)); when(layoutManager.findFirstVisibleItemPosition()).thenReturn(0); assertFalse(helper.scrollToPrevious()); when(layoutManager.findFirstVisibleItemPosition()).thenReturn(RecyclerView.NO_POSITION); assertFalse(helper.scrollToPrevious()); }
mRecyclerView.setLayoutManager(new SnappyLinearLayoutManager(this, true)); mRecyclerView.addItemDecoration(new CommentItemDecoration(this)); mScrollableHelper = new KeyDelegate.RecyclerViewHelper(mRecyclerView, KeyDelegate.RecyclerViewHelper.SCROLL_ITEM); if (savedInstanceState != null) {
@Override public boolean scrollToPrevious() { switch (mScrollMode) { case SCROLL_ITEM: default: int pos = getLinearLayoutManager().findFirstVisibleItemPosition(), previous = pos != RecyclerView.NO_POSITION ? pos - 1 : RecyclerView.NO_POSITION; if (previous >= 0) { mRecyclerView.smoothScrollToPosition(previous); return true; } else { return false; } case SCROLL_PAGE: if (getLinearLayoutManager().findFirstVisibleItemPosition() <= 0) { return false; } else { mRecyclerView.smoothScrollBy(0, -mRecyclerView.getHeight()); return true; } } }
int[] scrollToPosition(int position) { if (position >= 0 && position < mRecyclerView.getAdapter().getItemCount()) { if (!mSmoothScroll) { getLinearLayoutManager().scrollToPositionWithOffset(position, 0); return null; } int first = getLinearLayoutManager().findFirstVisibleItemPosition(); int[] lock = null; if (Math.abs(position - first) > 1) { // lock nothing if scroll to adjacent if (position < first) { // scroll up, lock lower part lock = new int[]{position, first - 1}; } else if (position > first) { // scroll down, lock upper part lock = new int[]{first, position - 1}; } } mRecyclerView.smoothScrollToPosition(position); return lock; } else { return null; } }
@Override public boolean scrollToNext() { int pos = mScrollMode == SCROLL_ITEM ? getLinearLayoutManager().findFirstVisibleItemPosition() : getLinearLayoutManager().findLastCompletelyVisibleItemPosition(), next = pos != RecyclerView.NO_POSITION ? pos + 1 : RecyclerView.NO_POSITION; if (next != RecyclerView.NO_POSITION && next < mRecyclerView.getAdapter().getItemCount()) { mRecyclerView.smoothScrollToPosition(next); return true; } else { return false; } }
int getCurrentPosition() { // TODO handle last page item return getLinearLayoutManager().findFirstVisibleItemPosition(); }
@Override public boolean scrollToPrevious() { return mScrollableHelper.scrollToPrevious(); }
@Override public boolean scrollToNext() { return mScrollableHelper.scrollToNext(); }
@Override public boolean scrollToNext() { return mScrollableHelper.scrollToNext(); }
@Override public void scrollToTop() { mScrollableHelper.scrollToTop(); }
@Override public boolean scrollToPrevious() { return mScrollableHelper.scrollToPrevious(); }
@Override public boolean scrollToNext() { return mScrollableHelper.scrollToNext(); }
@Override public void scrollToTop() { mScrollableHelper.scrollToTop(); }
@Override public void scrollToTop() { mScrollableHelper.scrollToTop(); }
@Override public boolean scrollToPrevious() { return mScrollableHelper.scrollToPrevious(); }
@Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); if (savedInstanceState != null) { getAdapter().restoreState(savedInstanceState.getBundle(STATE_ADAPTER)); } getAdapter().setCardViewEnabled(Preferences.isListItemCardView(getActivity())); getAdapter().setCustomTabsDelegate(mCustomTabsDelegate); mRecyclerView.setAdapter(getAdapter()); mScrollableHelper = new KeyDelegate.RecyclerViewHelper(mRecyclerView, KeyDelegate.RecyclerViewHelper.SCROLL_PAGE); }
@Test public void testScrollToTop() { helper = new KeyDelegate.RecyclerViewHelper(recyclerView, KeyDelegate.RecyclerViewHelper.SCROLL_ITEM); helper.scrollToTop(); verify(recyclerView).scrollToPosition(eq(0)); }
@Test public void testScrollToPreviousPage() { when(layoutManager.findFirstVisibleItemPosition()).thenReturn(5); helper = new KeyDelegate.RecyclerViewHelper(recyclerView, KeyDelegate.RecyclerViewHelper.SCROLL_PAGE); assertTrue(helper.scrollToPrevious()); verify(recyclerView).smoothScrollBy(anyInt(), anyInt()); when(layoutManager.findFirstVisibleItemPosition()).thenReturn(0); assertFalse(helper.scrollToPrevious()); }