package net.miz_hi.smileessence.system; import android.app.Activity; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentActivity; import android.support.v4.view.ViewPager; import net.miz_hi.smileessence.view.fragment.ISingleton; import net.miz_hi.smileessence.view.fragment.NamedFragment; import net.miz_hi.smileessence.view.fragment.NamedFragmentPagerAdapter; import net.miz_hi.smileessence.view.fragment.impl.HistoryFragment; import net.miz_hi.smileessence.view.fragment.impl.HomeFragment; import net.miz_hi.smileessence.view.fragment.impl.MentionsFragment; import net.miz_hi.smileessence.view.fragment.impl.PostFragment; import java.util.ArrayList; import java.util.List; public class PageController { private static PageController instance; public static final int PAGE_POST = 0; private NamedFragmentPagerAdapter adapter; private ViewPager pager; private FragmentActivity activity; public static PageController getInstance() { return instance; } public static void init(FragmentActivity activity, ViewPager pager) { instance = new PageController(activity, pager); } private PageController(FragmentActivity activity, ViewPager pager) { adapter = new NamedFragmentPagerAdapter(activity.getSupportFragmentManager()); this.activity = activity; this.pager = pager; initPages(activity); } private void initPages(Activity activity) { adapter.add((NamedFragment) Fragment.instantiate(activity, PostFragment.class.getName())); adapter.add((NamedFragment) Fragment.instantiate(activity, HomeFragment.class.getName())); adapter.add((NamedFragment) Fragment.instantiate(activity, MentionsFragment.class.getName())); adapter.add((NamedFragment) Fragment.instantiate(activity, HistoryFragment.class.getName())); } public void move(int index) { move(index, true); } public void move(int index, boolean smooth) { pager.setCurrentItem(index, smooth); ((NamedFragment) adapter.getItem(index)).onSelected(); } public void moveToLast() { move(adapter.getCount() - 1, false); } public int getCurrentPage() { return pager.getCurrentItem(); } public void addPage(NamedFragment fragment) { if(fragment instanceof ISingleton) { for(int i = 0; i < getCount(); i++) { if(getPage(i).getClass().isInstance(fragment)) { removePage(i); } } } adapter.add(fragment); pager.setOffscreenPageLimit(pager.getChildCount()); } public void removePage() { int current = pager.getCurrentItem(); removePage(current); pager.setCurrentItem(current, false); } public void removePage(int index) { removePage(((NamedFragment) adapter.getItem(index)).getTitle()); } public void removePage(String name) { adapter.remove(name); List<NamedFragment> list = new ArrayList<NamedFragment>(); list.addAll(adapter.getList()); adapter = new NamedFragmentPagerAdapter(activity.getSupportFragmentManager(), list); //Refresh page caches pager.setAdapter(instance.adapter); pager.setOffscreenPageLimit(pager.getChildCount()); } public NamedFragment getPage(int index) { return (NamedFragment) adapter.getItem(index); } public NamedFragment getPage(String name) { return adapter.getByName(name); } public int getPageIndex(Fragment fragment) { return adapter.getItemPosition(fragment); } public int getCount() { return adapter.getCount(); } public NamedFragmentPagerAdapter getAdapter() { return adapter; } }