package licola.demo.com.huabandemo.Base; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentPagerAdapter; import android.support.v4.view.ViewPager; import android.support.v4.widget.SwipeRefreshLayout; import android.view.MotionEvent; import android.view.View; import java.util.ArrayList; import butterknife.BindView; import licola.demo.com.huabandemo.API.OnFragmentRefreshListener; import licola.demo.com.huabandemo.API.Fragment.OnRefreshFragmentInteractionListener; import licola.demo.com.huabandemo.R; /** * Created by LiCola on 2016/04/23 17:34 * 集成了 SwipeRefreshLayout ViewPager 两个控件的Activity * 作为抽象父类 提供控制功能 */ public abstract class BaseSwipeViewPagerActivity<T extends BaseFragment> extends BaseActivity implements OnRefreshFragmentInteractionListener { @BindView(R.id.container) protected ViewPager mViewPager; @BindView(R.id.swipe_refresh_widget) protected SwipeRefreshLayout mSwipeRefresh; protected ArrayList<T> mFragmentList; protected String[] mTitleList; protected abstract String[] getTitleList(); //刷新的接口 子Fragment实现 protected OnFragmentRefreshListener mListenerRefresh; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mTitleList = getTitleList(); mFragmentList = initFragmentList(); //默认取第一个为强转为接口 mListenerRefresh = (OnFragmentRefreshListener) mFragmentList.get(0); initViewPagerTab(); } //初始创建出 fragment集合 protected abstract ArrayList<T> initFragmentList(); protected void initViewPagerTab() { // Create the adapter that will return a fragment for each of the three // primary sections of the activity. SectionsPagerAdapter mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager()); // Set up the ViewPager with the sections adapter. mViewPager.setAdapter(mSectionsPagerAdapter); mViewPager.setOffscreenPageLimit(mFragmentList.size()); setupTabLayoutWithViewPager(mViewPager); } //抽象方法 绑定viewpager和tablayout protected abstract void setupTabLayoutWithViewPager(ViewPager mViewPager); protected void setSwipeRefresh(){ mSwipeRefresh.setRefreshing(true); mListenerRefresh.getHttpRefresh(); } protected void initResAndListener() { mSwipeRefresh.setColorSchemeResources(ints); mSwipeRefresh.setOnRefreshListener(() -> mListenerRefresh.getHttpRefresh()); //上下滑动mSwipeRefresh 和左右滑动mViewPager 滑动冲突解决 mViewPager.setOnTouchListener(new View.OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()) { case MotionEvent.ACTION_MOVE: mSwipeRefresh.setEnabled(false); break; case MotionEvent.ACTION_UP: case MotionEvent.ACTION_CANCEL: mSwipeRefresh.setEnabled(true); break; } return false; } }); mViewPager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() { @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) { // Logger.d("onPageScrolled= "+position+" "+positionOffset+" "+positionOffsetPixels); } @Override public void onPageSelected(int position) { // Logger.d("position=" + position); mListenerRefresh = (OnFragmentRefreshListener) mFragmentList.get(position); ViewPagerPageSelected(position); } @Override public void onPageScrollStateChanged(int state) { // Logger.d("state=" + state); } }); } @Override public void OnRefreshState(boolean isRefreshing) { mSwipeRefresh.setRefreshing(isRefreshing); } protected abstract void ViewPagerPageSelected(int position); /** * A {@link FragmentPagerAdapter} that returns a fragment corresponding to * one of the sections/tabs/pages. */ public class SectionsPagerAdapter extends FragmentPagerAdapter { public SectionsPagerAdapter(FragmentManager fm) { super(fm); } @Override public Fragment getItem(int position) { // getItem is called to instantiate the fragment for the given page. // Return a PlaceholderFragment (defined as a static inner class below). return mFragmentList.get(position); } @Override public int getCount() { return mTitleList.length; } @Override public CharSequence getPageTitle(int position) { return mTitleList[position]; } } }