package uk.co.imallan.tuchongdaily.ui.adapter;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.support.v4.view.PagerAdapter;
import android.util.SparseArray;
import android.view.View;
import android.view.ViewGroup;
/**
* Created by allan on 15/2/25.
*/
public abstract class AbstractPagerAdapter extends PagerAdapter {
private final SparseArray<Fragment> registeredFragments;
private final FragmentManager mFragmentManager;
FragmentTransaction mCurrentTransaction = null;
public AbstractPagerAdapter(FragmentManager fm) {
this.mFragmentManager = fm;
registeredFragments = new SparseArray<Fragment>();
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
if (mCurrentTransaction == null) {
mCurrentTransaction = mFragmentManager.beginTransaction();
}
Fragment fragment = getItem(position);
registeredFragments.put(position, fragment);
mCurrentTransaction.add(container.getId(), fragment);
return fragment;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
if (mCurrentTransaction == null) {
mCurrentTransaction = mFragmentManager.beginTransaction();
}
Fragment registeredFragment = getRegisteredFragment(position);
mCurrentTransaction.remove(registeredFragment);
registeredFragments.remove(position);
}
@Override
public boolean isViewFromObject(View view, Object object) {
return ((Fragment) object).getView() == view;
}
@Override
public void finishUpdate(ViewGroup container) {
if (mCurrentTransaction != null) {
mCurrentTransaction.commitAllowingStateLoss();
mCurrentTransaction = null;
mFragmentManager.executePendingTransactions();
}
}
public abstract Fragment getItem(int position);
public Fragment getRegisteredFragment(int position) {
return registeredFragments.get(position);
}
}