package com.lb.recyclerview_fast_scroller; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import com.google.android.material.tabs.TabLayout; import com.lb.lollipopcontactsrecyclerviewfastscroller.R; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.widget.Toolbar; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentManager; import androidx.fragment.app.FragmentStatePagerAdapter; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView.State; import androidx.viewpager.widget.ViewPager; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Toolbar toolbar = findViewById(R.id.toolbar); setSupportActionBar(toolbar); //note : part of the design library sample code was taken from : https://github.com/sitepoint-editors/Design-Demo/ DesignDemoPagerAdapter adapter = new DesignDemoPagerAdapter(getSupportFragmentManager(), FragmentStatePagerAdapter.BEHAVIOR_RESUME_ONLY_CURRENT_FRAGMENT); ViewPager viewPager = findViewById(R.id.viewpager); viewPager.setAdapter(adapter); TabLayout tabLayout = findViewById(R.id.tablayout); tabLayout.setupWithViewPager(viewPager); } @Override public boolean onCreateOptionsMenu(final Menu menu) { getMenuInflater().inflate(R.menu.activity_main, menu); return super.onCreateOptionsMenu(menu); } @Override public boolean onOptionsItemSelected(final MenuItem item) { String url = null; switch (item.getItemId()) { case R.id.menuItem_all_my_apps: url = "https://play.google.com/store/apps/developer?id=AndroidDeveloperLB"; break; case R.id.menuItem_all_my_repositories: url = "https://github.com/AndroidDeveloperLB"; break; case R.id.menuItem_current_repository_website: url = "https://github.com/AndroidDeveloperLB/LollipopContactsRecyclerViewFastScroller"; break; } if (url == null) return true; final Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY | Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_MULTIPLE_TASK); startActivity(intent); return true; } static class DesignDemoPagerAdapter extends FragmentStatePagerAdapter { public DesignDemoPagerAdapter(@NonNull final FragmentManager fm, final int behavior) { super(fm, behavior); } @NonNull @Override public Fragment getItem(int position) { final RecyclerViewFragment recyclerViewFragment = new RecyclerViewFragment(); Bundle args = new Bundle(); args.putInt(RecyclerViewFragment.ITEMS_COUNT, getFragmentItemsCount(position)); recyclerViewFragment.setArguments(args); return recyclerViewFragment; } private int getFragmentItemsCount(int pos) { return (int) Math.pow(4, (getCount() - pos)); } @Override public int getCount() { return 5; } @Override public CharSequence getPageTitle(int position) { return "itemsCount: " + getFragmentItemsCount(position); } } public static class RecyclerViewFragment extends Fragment { public static final String ITEMS_COUNT = "ITEMS_COUNT"; public int numberOfItems; @Nullable @Override public View onCreateView(final LayoutInflater inflater, final ViewGroup container, final Bundle savedInstanceState) { numberOfItems = getArguments().getInt(ITEMS_COUNT); View rootView = inflater.inflate(R.layout.fragment_recycler_view, container, false); RecyclerView recyclerView = rootView.findViewById(R.id.recyclerview); final LargeAdapter adapter = new LargeAdapter(numberOfItems); recyclerView.setAdapter(adapter); final RecyclerViewFastScroller fastScroller = rootView.findViewById(R.id.fastscroller); recyclerView.setLayoutManager(new LinearLayoutManager(getActivity(), LinearLayoutManager.VERTICAL, false) { @Override public void onLayoutCompleted(final State state) { super.onLayoutCompleted(state); final int firstVisibleItemPosition = findFirstVisibleItemPosition(); final int lastVisibleItemPosition = findLastVisibleItemPosition(); int itemsShown = lastVisibleItemPosition - firstVisibleItemPosition + 1; //if all items are shown, hide the fast-scroller fastScroller.setVisibility(adapter.getItemCount() > itemsShown ? View.VISIBLE : View.GONE); } }); fastScroller.setRecyclerView(recyclerView); fastScroller.setViewsToUse(R.layout.recycler_view_fast_scroller__fast_scroller, R.id.fastscroller_bubble, R.id.fastscroller_handle); //new Handler().postDelayed(new Runnable() { // @Override // public void run() { // adapter.setItemsCount(new Random().nextInt(20)); // adapter.notifyDataSetChanged(); // } //}, 2000L); return rootView; } } }