|
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(); |
|
} |
|
} |