blob: 62ce37813fa841808295c4501c5ca0ef62957dba [file] [log] [blame]
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;
}
}
}