package com.lean56.andplug.adapter;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.view.ViewGroup;
import com.lean56.andplug.fragment.BaseFragment;
import com.lean56.andplug.fragment.FragmentProvider;
import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.List;
/**
* Pager adapter that provides the current fragment
*
* @author Charles <zhangchaoxu@gmail.com>
*/
public abstract class FragmentPagerAdapter extends android.support.v4.app.FragmentPagerAdapter implements FragmentProvider {
private final FragmentActivity activity;
private BaseFragment selected;
/**
* @param activity
*/
public FragmentPagerAdapter(FragmentActivity activity) {
super(activity.getSupportFragmentManager());
this.activity = activity;
}
/**
* @param fragment
*/
public FragmentPagerAdapter(Fragment fragment) {
super(fragment.getChildFragmentManager());
this.activity = fragment.getActivity();
}
@Override
public BaseFragment getSelected() {
return selected;
}
@Override
public void setPrimaryItem(final ViewGroup container, final int position, final Object object) {
super.setPrimaryItem(container, position, object);
boolean changed = false;
if (object instanceof BaseFragment) {
changed = object != selected;
selected = ( BaseFragment) object;
} else {
changed = object != null;
selected = null;
}
if (changed)
activity.invalidateOptionsMenu();
}
// [+] save status
private List<WeakReference<Fragment>> mList = new ArrayList<>();
public List<WeakReference<Fragment>> getFragments() {
for (int i = mList.size() - 1; i >= 0; --i) {
if (null == mList.get(i).get()) {
mList.remove(i);
}
}
return mList;
}
protected void saveFragment(Fragment fragment) {
if (fragment == null)
return;
for (WeakReference<Fragment> item : mList) {
if (item.get() == fragment)
return;
}
mList.add(new WeakReference<>(fragment));
}
// [-] save status
}