package com.kedzie.vbox.app; import android.support.v4.app.FragmentPagerAdapter; import android.support.v4.app.FragmentTransaction; import android.support.v4.view.ViewPager; import android.view.ViewGroup; import com.actionbarsherlock.app.ActionBar; import com.actionbarsherlock.app.ActionBar.Tab; import com.actionbarsherlock.app.SherlockFragmentActivity; import com.kedzie.vbox.SettingsActivity; /** * {@link FragmentPagerAdapter} which is integrated with {@link ActionBar} tab navigation. * * @author Marek Kędzierski */ public class TabSupportActionBarViewPager implements TabSupport, ActionBar.TabListener, ViewPager.OnPageChangeListener { private SherlockFragmentActivity mActivity; private ActionBar mActionBar; private ViewPager mViewPager; private FragPagerAdapter mAdapter; public TabSupportActionBarViewPager(SherlockFragmentActivity activity, int container) { mActivity=activity; mActionBar=activity.getSupportActionBar(); mActionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); mViewPager=new ViewPager(mActivity); mViewPager.setId(99); mViewPager.setOffscreenPageLimit(4); String transition = Utils.getStringPreference(mActivity, SettingsActivity.PREF_TAB_TRANSITION); if(transition.equals("Flip")) mViewPager.setPageTransformer(false, new FlipPageTransformer()); else if(transition.equals("Slide")) mViewPager.setPageTransformer(false, new ZoomOutPageTransformer()); else if(transition.equals("Accordian")) mViewPager.setPageTransformer(false, new AccordianPageTransformer()); if(container==android.R.id.content) mActivity.setContentView(mViewPager); else ((ViewGroup)mActivity.findViewById(container)).addView(mViewPager); mAdapter = new FragPagerAdapter(); mAdapter.setup(mActivity, activity.getSupportFragmentManager()); mViewPager.setAdapter(mAdapter); mViewPager.setOnPageChangeListener(this); } @Override public void addTab(FragmentElement info) { Tab tab = mActionBar.newTab().setTag(info.name).setTabListener(this); if(info.icon!=-1) tab.setIcon(info.icon); else tab.setText(info.name); mActionBar.addTab( tab ); mAdapter.add(info); } @Override public void removeTab(String name) { FragmentElement info = new FragmentElement(name, null, null); mActionBar.removeTabAt(mAdapter.getTabs().indexOf(info)); mAdapter.remove(info); } @Override public void removeAllTabs() { mActionBar.removeAllTabs(); mAdapter.clear(); } @Override public void setCurrentTab(int position) { mActionBar.setSelectedNavigationItem(position); } @Override public void onPageSelected(int position) { mActivity.getSupportActionBar().setSelectedNavigationItem(position); } @Override public void onTabSelected(Tab tab, FragmentTransaction ft) { // mViewPager.setCurrentItem(mAdapter.getTabs().indexOf(new FragmentElement((String)tab.getTag(), null, null))); for (int i=0; i<mAdapter.getTabs().size(); i++) if (mAdapter.getTabs().get(i).name == tab.getTag()) mViewPager.setCurrentItem(i); } @Override public void onPageScrollStateChanged(int state) {} @Override public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {} @Override public void onTabUnselected(Tab tab, FragmentTransaction ft) {} @Override public void onTabReselected(Tab tab, FragmentTransaction ft) {} }