package com.transitwidget.adapters; import android.os.Bundle; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentStatePagerAdapter; import android.support.v4.view.ViewPager; import android.util.Log; import android.view.View; import android.widget.TextView; import java.util.ArrayList; /** * * @author john */ public class PagerAdapter extends FragmentStatePagerAdapter { public static final String TAG = PagerAdapter.class.getName(); private ArrayList<Page> pages = new ArrayList<Page>(); private ViewPager mPager; private ViewPager.OnPageChangeListener mListener = null; private TextView mHeader = null; public PagerAdapter(FragmentManager fm, ViewPager pager) { super(fm); mPager = pager; mPager.setAdapter(this); mPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() { public void onPageScrolled(int i, float f, int i1) { if (mListener != null) mListener.onPageScrolled(i, f, i1); } public void onPageSelected(int i) { select(i); if (mListener != null) mListener.onPageSelected(i); } public void onPageScrollStateChanged(int i) { if (mListener != null) mListener.onPageScrollStateChanged(i); } }); } public void setOnPageChangeListener(ViewPager.OnPageChangeListener listener) { mListener = listener; } public void setHeaderView(TextView view) { mHeader = view; } public void select(int position) { for (int i = 0, l = pages.size(); i < l; i++) { Page page = pages.get(i); if (page.button != null) page.button.setSelected(i == position); } if (mHeader != null) { mHeader.setText(getTitle(position)); } } public String getTitle(int position) { return pages.get(position).title; } public void addPage(View button, String title, Class page, Bundle args) { int pos = pages.size(); addPage(new Page(title, pos, page, args, button)); } public void addPage(View button, String title, Class page) { addPage(button, title, page, null); } public void addPage(Page page) { pages.add(page); } @Override public int getCount() { return pages.size(); } @Override public Fragment getItem(int position) { Page page = pages.get(position); try { Fragment fragment = (Fragment) page.fragment.newInstance(); fragment.setArguments(page.args); return fragment; } catch (IllegalAccessException ex) { Log.e(TAG, "Unable to load fragment", ex); return null; } catch (InstantiationException ex) { Log.e(TAG, "Unable to load fragment", ex); return null; } } class Page { public final String title; public final Class fragment; public final Bundle args; public final View button; private final int position; public Page(final String title, final int position, final Class fragment, final Bundle args, final View button) { this.title = title; this.position = position; this.fragment = fragment; this.args = args; this.button = button; if (button != null) { button.setOnClickListener(new View.OnClickListener() { public void onClick(View arg0) { mPager.setCurrentItem(position); } }); // Start with the first button selected if (position == 0) { button.setSelected(true); } } } } }