Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save DevHossamHassan/3e068f6848ca6736abd95a389a43a940 to your computer and use it in GitHub Desktop.
Save DevHossamHassan/3e068f6848ca6736abd95a389a43a940 to your computer and use it in GitHub Desktop.
navigation manager for fragments
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.text.TextUtils;
import your.package.R;
public class NavigationManager {
private FragmentManager mFragmentManager;
public NavigationManager(FragmentManager fragmentManager){
mFragmentManager = fragmentManager;
}
/**
* Displays the next fragment
*
* @param fragment
*/
public void attach(Fragment fragment, boolean isAnimated, String tag) {
if (mFragmentManager != null && !isAtTheTopOnBackStack(tag)) {
FragmentTransaction ft = mFragmentManager.beginTransaction();
if (isAnimated)
ft.setCustomAnimations(R.anim.abc_fade_in, R.anim.abc_fade_out, R.anim.abc_fade_in, R.anim.abc_fade_out);
if (!TextUtils.isEmpty(tag))
ft.addToBackStack(tag);
ft.replace(R.id.content_frame, fragment);
ft.commit();
}
}
public void attach(Fragment fragment, int containerId, boolean isAnimated, String tag) {
if (mFragmentManager != null && !isAtTheTopOnBackStack(tag)) {
FragmentTransaction ft = mFragmentManager.beginTransaction();
if (isAnimated)
ft.setCustomAnimations(R.anim.abc_fade_in, R.anim.abc_fade_out, R.anim.abc_fade_in, R.anim.abc_fade_out);
if (!TextUtils.isEmpty(tag))
ft.addToBackStack(tag);
ft.add(containerId, fragment, tag);
ft.commit();
}
}
public void attachAsRoot(Fragment fragment, boolean isAnimated, String tag) {
if (mFragmentManager != null && !isAtTheTopOnBackStack(tag)) {
for (int i = 0; i < mFragmentManager.getBackStackEntryCount(); i++)
mFragmentManager.popBackStackImmediate();
attach(fragment, isAnimated, tag);
}
}
/**
* @return true if stack has been popped succesfully, false if the stack has one element
*/
public boolean popBackStackImmediate() {
if (mFragmentManager == null) return false;
if (mFragmentManager.getBackStackEntryCount() == 0) {
return false;
} else {
mFragmentManager.popBackStackImmediate();
return true;
}
}
private boolean isAtTheTopOnBackStack(String tag) {
if (mFragmentManager.getBackStackEntryCount() == 0) return false;
return TextUtils.equals(mFragmentManager.getBackStackEntryAt(mFragmentManager.getBackStackEntryCount() - 1).getName(), tag);
}
public boolean isBackstackEmpty(){
return mFragmentManager.getBackStackEntryCount() == 0;
}
public int getBackstackEntryCount(){
return mFragmentManager.getBackStackEntryCount();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment