@@ -91,30 +91,57 @@ public DesignDemoPagerAdapter(FragmentManager fm) {
9191
9292 @ Override
9393 public Fragment getItem (int position ) {
94- return new RecyclerViewFragment ();
94+ final RecyclerViewFragment recyclerViewFragment = new RecyclerViewFragment ();
95+ recyclerViewFragment .numberOfItems = getFragmentItemsCount (position );
96+ return recyclerViewFragment ;
97+ }
98+
99+ private int getFragmentItemsCount (int pos ) {
100+ return (int ) Math .pow (4 , (getCount () - pos ));
95101 }
96102
97103 @ Override
98104 public int getCount () {
99- return 3 ;
105+ return 5 ;
100106 }
101107
102108 @ Override
103109 public CharSequence getPageTitle (int position ) {
104- return "Tab " + position ;
110+ return "itemsCount: " + getFragmentItemsCount ( position ) ;
105111 }
106112 }
107113
108114
109115 public static class RecyclerViewFragment extends Fragment {
116+ public int numberOfItems ;
117+
110118 @ Nullable
111119 @ Override
112120 public View onCreateView (final LayoutInflater inflater , final ViewGroup container , final Bundle savedInstanceState ) {
113121 View rootView = inflater .inflate (R .layout .fragment_recycler_view , container , false );
114122 RecyclerView recyclerView = (RecyclerView ) rootView .findViewById (R .id .recyclerview );
115- recyclerView .setAdapter (new LargeAdapter ());
116- recyclerView .setLayoutManager (new LinearLayoutManager (getActivity (), LinearLayoutManager .VERTICAL , false ));
117- RecyclerViewFastScroller fastScroller = (RecyclerViewFastScroller ) rootView .findViewById (R .id .fastscroller );
123+ final LargeAdapter adapter = new LargeAdapter (numberOfItems );
124+ recyclerView .setAdapter (adapter );
125+ final RecyclerViewFastScroller fastScroller = (RecyclerViewFastScroller ) rootView .findViewById (R .id .fastscroller );
126+ recyclerView .setLayoutManager (new LinearLayoutManager (getActivity (), LinearLayoutManager .VERTICAL , false ) {
127+ @ Override
128+ public void onLayoutChildren (final RecyclerView .Recycler recycler , final RecyclerView .State state ) {
129+ super .onLayoutChildren (recycler , state );
130+ //TODO if the items are filtered, considered hiding the fast scroller here
131+ final int firstVisibleItemPosition = findFirstVisibleItemPosition ();
132+ if (firstVisibleItemPosition != 0 ) {
133+ // this avoids trying to handle un-needed calls
134+ if (firstVisibleItemPosition == -1 )
135+ //not initialized, or no items shown, so hide fast-scroller
136+ fastScroller .setVisibility (View .GONE );
137+ return ;
138+ }
139+ final int lastVisibleItemPosition = findLastVisibleItemPosition ();
140+ int itemsShown = lastVisibleItemPosition - firstVisibleItemPosition + 1 ;
141+ //if all items are shown, hide the fast-scroller
142+ fastScroller .setVisibility (adapter .getItemCount () > itemsShown ? View .VISIBLE : View .GONE );
143+ }
144+ });
118145 fastScroller .setRecyclerView (recyclerView );
119146 fastScroller .setViewsToUse (R .layout .recycler_view_fast_scroller__fast_scroller , R .id .fastscroller_bubble , R .id .fastscroller_handle );
120147 return rootView ;
0 commit comments