Skip to content

Instantly share code, notes, and snippets.

@xingrz
Last active June 14, 2016 15:53
Show Gist options
  • Save xingrz/484bf2a49afc9d71f750 to your computer and use it in GitHub Desktop.
Save xingrz/484bf2a49afc9d71f750 to your computer and use it in GitHub Desktop.
屌炸天的 Fragment Manager
fragmentManager = new FuckingFragmentManager(this, R.id.container);

navigation.setNavigationItemSelectedListener(menuItem -> {
    if (switchFragment(menuItem.getItemId())) {
        drawer.closeDrawers();
        return true;
    } else {
        return false;
    }
});
private boolean switchFragment(@IdRes int id) {
    switch (id) {
        case R.id.home:
            fragmentManager.switchTo(FeedFragment.class);
            return true;
        case R.id.explore:
            fragmentManager.switchTo(ExploreFragment.class);
            return true;
        default:
            return false;
    }
}
import android.support.annotation.IdRes;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import java.util.HashMap;
public class FuckingFragmentManager {
private final HashMap<String, Fragment> fragments = new HashMap<>();
private final FragmentActivity activity;
private final FragmentManager fragmentManager;
private final int container;
private String current;
public FuckingFragmentManager(FragmentActivity activity, @IdRes int container) {
this.activity = activity;
this.fragmentManager = activity.getSupportFragmentManager();
this.container = container;
}
public void switchTo(Class<? extends Fragment> fragment) {
String name = fragment.getName();
if (current != null) {
fragmentManager.beginTransaction().hide(fragments.get(current)).commit();
}
if (fragmentManager.findFragmentByTag(name) == null) {
Fragment instance = Fragment.instantiate(activity, name);
fragments.put(name, instance);
fragmentManager.beginTransaction().add(container, instance, name).commit();
} else {
fragmentManager.beginTransaction().show(fragments.get(name)).commit();
}
current = name;
}
@Nullable
public Fragment getFragment(Class<? extends Fragment> fragment) {
return fragments.get(fragment.getName());
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment