package com.netease.nim.demo.common.ui.viewpager; import android.content.Context; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentPagerAdapter; import android.support.v4.view.ViewPager; import com.netease.nim.uikit.common.fragment.TabFragment; public abstract class SlidingTabPagerAdapter extends FragmentPagerAdapter implements TabFragment.State, PagerSlidingTabStrip.OnTabClickListener, PagerSlidingTabStrip.OnTabDoubleTapListener { protected final TabFragment[] fragments; protected final Context context; private final ViewPager pager; public abstract int getCacheCount(); private int lastPostion = 0; public SlidingTabPagerAdapter(FragmentManager fm, int count, Context context, ViewPager pager) { super(fm); this.fragments = new TabFragment[count]; this.context = context; this.pager = pager; lastPostion = 0; } @Override public TabFragment getItem(int pos) { return fragments[pos]; } @Override public abstract int getCount(); @Override public abstract CharSequence getPageTitle(int position); @Override public boolean isCurrent(TabFragment f) { // FROM PAGER int current = pager.getCurrentItem(); // TRAVEL for (int index = 0; index < fragments.length; index++) { // CATCH if (f == fragments[index]) { // MATCH if (index == current) { return true; } } } // ANY PROBLEM return false; } public void onPageSelected(int position) { TabFragment fragment = getFragmentByPosition(position); // INSTANCE if (fragment == null) { return; } fragment.onCurrent(); onLeave(position); } private void onLeave(int position) { TabFragment fragment = getFragmentByPosition(lastPostion); lastPostion = position; // INSTANCE if (fragment == null) { return; } fragment.onLeave(); } public void onPageScrolled(int position) { TabFragment fragment = getFragmentByPosition(position); // INSTANCE if (fragment == null) { return; } fragment.onCurrentScrolled(); onLeave(position); } private TabFragment getFragmentByPosition(int position) { // IDX if (position < 0 || position >= fragments.length) { return null; } return fragments[position]; } @Override public void onCurrentTabClicked(int position) { TabFragment fragment = getFragmentByPosition(position); // INSTANCE if (fragment == null) { return; } fragment.onCurrentTabClicked(); } @Override public void onCurrentTabDoubleTap(int position) { TabFragment fragment = getFragmentByPosition(position); // INSTANCE if (fragment == null) { return; } fragment.onCurrentTabDoubleTap(); } }