aboutsummaryrefslogtreecommitdiff
path: root/WordPress/src/main/java/org/wordpress/android/ui/main/WPMainTabAdapter.java
diff options
context:
space:
mode:
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.java91
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;
+ }
+ }
+
+}