diff options
Diffstat (limited to 'WordPress/src/main/java/org/wordpress/android/ui/main/WPMainTabAdapter.java')
-rw-r--r-- | WordPress/src/main/java/org/wordpress/android/ui/main/WPMainTabAdapter.java | 91 |
1 files changed, 91 insertions, 0 deletions
diff --git a/WordPress/src/main/java/org/wordpress/android/ui/main/WPMainTabAdapter.java b/WordPress/src/main/java/org/wordpress/android/ui/main/WPMainTabAdapter.java new file mode 100644 index 000000000..62ce37813 --- /dev/null +++ b/WordPress/src/main/java/org/wordpress/android/ui/main/WPMainTabAdapter.java @@ -0,0 +1,91 @@ +package org.wordpress.android.ui.main; + +import android.app.Fragment; +import android.app.FragmentManager; +import android.os.Parcelable; +import android.support.v13.app.FragmentStatePagerAdapter; +import android.util.SparseArray; +import android.view.ViewGroup; + +import org.wordpress.android.ui.notifications.NotificationsListFragment; +import org.wordpress.android.ui.reader.ReaderPostListFragment; + +/** + * pager adapter containing tab fragments used by WPMainActivity + */ +class WPMainTabAdapter extends FragmentStatePagerAdapter { + + static final int NUM_TABS = 4; + + static final int TAB_MY_SITE = 0; + static final int TAB_READER = 1; + static final int TAB_ME = 2; + static final int TAB_NOTIFS = 3; + + private final SparseArray<Fragment> mFragments = new SparseArray<>(NUM_TABS); + + public WPMainTabAdapter(FragmentManager fm) { + super(fm); + } + + @Override + public void restoreState(Parcelable state, ClassLoader loader) { + // work around "Fragement no longer exists for key" Android bug + // by catching the IllegalStateException + // https://code.google.com/p/android/issues/detail?id=42601 + try { + super.restoreState(state, loader); + } catch (IllegalStateException e) { + // nop + } + } + + @Override + public int getCount() { + return NUM_TABS; + } + + public boolean isValidPosition(int position) { + return (position >= 0 && position < getCount()); + } + + @Override + public Fragment getItem(int position) { + switch (position) { + case TAB_MY_SITE: + return MySiteFragment.newInstance(); + case TAB_READER: + return ReaderPostListFragment.newInstance(); + case TAB_ME: + return MeFragment.newInstance(); + case TAB_NOTIFS: + return NotificationsListFragment.newInstance(); + default: + return null; + } + } + + @Override + public Object instantiateItem(ViewGroup container, int position) { + Object item = super.instantiateItem(container, position); + if (item instanceof Fragment) { + mFragments.put(position, (Fragment) item); + } + return item; + } + + @Override + public void destroyItem(ViewGroup container, int position, Object object) { + mFragments.remove(position); + super.destroyItem(container, position, object); + } + + public Fragment getFragment(int position) { + if (isValidPosition(position)) { + return mFragments.get(position); + } else { + return null; + } + } + +} |