package com.kedzie.vbox.app; import java.util.ArrayList; import java.util.List; import android.content.Context; import android.os.Parcelable; 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.Log; import android.view.View; import android.view.ViewGroup; public class FragPagerAdapter extends PagerAdapter { private static final String TAG = "FragPagerAdapter"; private List<FragmentElement> mTabs = new ArrayList<FragmentElement>(); private Context mContext; private FragmentManager mFragmentManager; private FragmentTransaction mCurTransaction; private Fragment mCurrentPrimaryItem; public void setup(Context ctx, FragmentManager manager) { mContext=ctx; mFragmentManager=manager; } @Override public void startUpdate(ViewGroup container) { mCurTransaction = mFragmentManager.beginTransaction(); } @Override public Object instantiateItem(ViewGroup container, int position) { FragmentElement info = mTabs.get(position); Utils.addOrAttachFragment(mContext, mFragmentManager, mCurTransaction, container.getId(), info); if (info.fragment != mCurrentPrimaryItem) { info.fragment.setMenuVisibility(false); info.fragment.setUserVisibleHint(false); } return info.fragment; } @Override public void destroyItem(ViewGroup container, int position, Object object) { Log.d(TAG, "Removing item #" + position); mCurTransaction.remove((Fragment)object); } @Override public void finishUpdate(ViewGroup container) { if (mCurTransaction != null) { mCurTransaction.commitAllowingStateLoss(); mCurTransaction = null; mFragmentManager.executePendingTransactions(); } } @Override public void setPrimaryItem(ViewGroup container, int position, Object object) { Fragment fragment = (Fragment)object; if (fragment != mCurrentPrimaryItem) { if (mCurrentPrimaryItem != null) { mCurrentPrimaryItem.setMenuVisibility(false); mCurrentPrimaryItem.setUserVisibleHint(false); } if (fragment != null) { fragment.setMenuVisibility(true); fragment.setUserVisibleHint(true); } mCurrentPrimaryItem = fragment; } } @Override public boolean isViewFromObject(View view, Object object) { return ((Fragment)object).getView() == view; } @Override public int getItemPosition(Object object) { for(FragmentElement info : mTabs){ if(info.fragment==object) return POSITION_UNCHANGED; } return POSITION_NONE; } @Override public int getCount() { return mTabs.size(); } @Override public Parcelable saveState() { return null; } @Override public void restoreState(Parcelable state, ClassLoader loader) { } public List<FragmentElement> getTabs() { return mTabs; } public void add(FragmentElement tab) { mTabs.add(tab); notifyDataSetChanged(); } public void remove(FragmentElement tab) { mTabs.remove(tab); notifyDataSetChanged(); } public void clear() { mTabs.clear(); notifyDataSetChanged(); } public Fragment getCurrentTab() { return mCurrentPrimaryItem; } }