package net.simonvt.menudrawer.samples;
import net.simonvt.menudrawer.MenuDrawer;
import net.simonvt.menudrawer.Position;
import android.os.Build;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
public class FragmentSample extends BaseListSample {
private static final String STATE_CURRENT_FRAGMENT = "net.simonvt.menudrawer.samples.FragmentSample";
private FragmentManager mFragmentManager;
private FragmentTransaction mFragmentTransaction;
private String mCurrentFragmentTag;
@Override
protected void onCreate(Bundle inState) {
super.onCreate(inState);
mFragmentManager = getSupportFragmentManager();
if (inState != null) {
mCurrentFragmentTag = inState.getString(STATE_CURRENT_FRAGMENT);
} else {
mCurrentFragmentTag = ((Item) mAdapter.getItem(0)).mTitle;
attachFragment(mMenuDrawer.getContentContainer().getId(), getFragment(mCurrentFragmentTag),
mCurrentFragmentTag);
commitTransactions();
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
getActionBar().setDisplayHomeAsUpEnabled(true);
}
mMenuDrawer.setOnDrawerStateChangeListener(new MenuDrawer.OnDrawerStateChangeListener() {
@Override
public void onDrawerStateChange(int oldState, int newState) {
if (newState == MenuDrawer.STATE_CLOSED) {
commitTransactions();
}
}
@Override
public void onDrawerSlide(float openRatio, int offsetPixels) {
// Do nothing
}
});
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putString(STATE_CURRENT_FRAGMENT, mCurrentFragmentTag);
}
@Override
protected void onMenuItemClicked(int position, Item item) {
if (mCurrentFragmentTag != null) detachFragment(getFragment(mCurrentFragmentTag));
attachFragment(mMenuDrawer.getContentContainer().getId(), getFragment(item.mTitle), item.mTitle);
mCurrentFragmentTag = item.mTitle;
mMenuDrawer.closeMenu();
}
@Override
protected int getDragMode() {
return MenuDrawer.MENU_DRAG_WINDOW;
}
@Override
protected Position getDrawerPosition() {
return Position.LEFT;
}
protected FragmentTransaction ensureTransaction() {
if (mFragmentTransaction == null) {
mFragmentTransaction = mFragmentManager.beginTransaction();
mFragmentTransaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE);
}
return mFragmentTransaction;
}
private Fragment getFragment(String tag) {
Fragment f = mFragmentManager.findFragmentByTag(tag);
if (f == null) {
f = SampleFragment.newInstance(tag);
}
return f;
}
protected void attachFragment(int layout, Fragment f, String tag) {
if (f != null) {
if (f.isDetached()) {
ensureTransaction();
mFragmentTransaction.attach(f);
} else if (!f.isAdded()) {
ensureTransaction();
mFragmentTransaction.add(layout, f, tag);
}
}
}
protected void detachFragment(Fragment f) {
if (f != null && !f.isDetached()) {
ensureTransaction();
mFragmentTransaction.detach(f);
}
}
protected void commitTransactions() {
if (mFragmentTransaction != null && !mFragmentTransaction.isEmpty()) {
mFragmentTransaction.commit();
mFragmentTransaction = null;
}
}
public static class SampleFragment extends Fragment {
private static final String ARG_TEXT = "net.simonvt.menudrawer.samples.SampleFragment.text";
public static SampleFragment newInstance(String text) {
SampleFragment f = new SampleFragment();
Bundle args = new Bundle();
args.putString(ARG_TEXT, text);
f.setArguments(args);
return f;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fragment_sample, container, false);
((TextView) v.findViewById(R.id.text)).setText(getArguments().getString(ARG_TEXT));
return v;
}
}
}