下面列出了android.app.FragmentManager#BackStackEntry ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
@Override
public void popCurrent() {
logger.debug("popCurrent()");
int count = mFragmentManager.getBackStackEntryCount();
if (count > 0) {
FragmentManager.BackStackEntry bse = mFragmentManager.getBackStackEntryAt(count - 1);
String fragmentName = bse.getName();
if ("baseMapDownload".equals(fragmentName)) {
if (checkSelfPermission(Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
HelperUtils.showTargetedAdvice(MainActivity.this, Configuration.ADVICE_ENABLE_LOCATIONS, R.string.advice_enable_locations, mViews.locationButton, false);
}
} else if ("trackProperties".equals(fragmentName)) {
HelperUtils.showTargetedAdvice(this, Configuration.ADVICE_RECORDED_TRACKS, R.string.advice_recorded_tracks, mViews.recordButton, false);
}
}
mFragmentManager.popBackStack();
}
public Fragment getLastFragment() {
int backStackCount = mFragmentManager.getBackStackEntryCount();
if (backStackCount <= 0) return null;
FragmentManager.BackStackEntry backStackEntry = mFragmentManager.getBackStackEntryAt(backStackCount - 1);
String fragmentTag = backStackEntry.getName();
return mFragmentManager.findFragmentByTag(fragmentTag);
}
@Override
public boolean onMenuItemActionCollapse(MenuItem item) {
int backStackCount = getFragmentManager().getBackStackEntryCount();
if (backStackCount > 0) {
FragmentManager.BackStackEntry backEntry = getFragmentManager().getBackStackEntryAt(backStackCount - 1);
String str = backEntry.getName();
if (str.equals("threadDialog")){
getActivity().onBackPressed();
return false;
}
}
startStatusCheck();
return true;
}
@Override
public void onBackPressed() {
logger.debug("onBackPressed()");
if (backKeyIntercepted())
return;
int count = mFragmentManager.getBackStackEntryCount();
if (count > 0) {
FragmentManager.BackStackEntry bse = mFragmentManager.getBackStackEntryAt(count - 1);
if (BuildConfig.FULL_VERSION && "settings".equals(bse.getName()))
HelperUtils.showTargetedAdvice(this, Configuration.ADVICE_MAP_SETTINGS, R.string.advice_map_settings, mViews.mapsButton, false);
if ("trackProperties".equals(bse.getName()))
HelperUtils.showTargetedAdvice(this, Configuration.ADVICE_RECORDED_TRACKS, R.string.advice_recorded_tracks, mViews.recordButton, false);
super.onBackPressed();
if (count == 1 && mPanelState != PANEL_STATE.NONE)
setPanelState(PANEL_STATE.NONE);
return;
}
if (count == 0 || secondBack) {
//mBackToast.cancel();
finish();
} else {
secondBack = true;
mBackToast.show();
mBackHandler.postDelayed(() -> secondBack = false, 2000);
}
}
@Override
public void onBackStackChanged() {
if (getFragmentManager().getBackStackEntryCount() < 1) {
mCurrentItem = HexDrawer.Item.FrontPage;
} else {
FragmentManager.BackStackEntry bse = getFragmentManager().getBackStackEntryAt(getFragmentManager().getBackStackEntryCount() - 1);
mCurrentItem = HexDrawer.Item.valueOf(bse.getName());
}
updateToolbarTitle();
updateDrawer();
}
@Override
protected void onResume() {
super.onResume();
hideTabBar();
int count = getFragmentManager().getBackStackEntryCount();
if (count == 0) {
showTopBarWithTitle(getString(R.string.settings));
} else {
FragmentManager.BackStackEntry entry =
getFragmentManager().getBackStackEntryAt(count - 1);
showTopBarWithTitle(entry.getName());
}
}
void addFragment(final Fragment fragment, int transition1, int transition2) {
if (mFragmentNameList.contains(fragment.getClass())) {
mNavigation.setSelectedItem(mFragmentNameList.indexOf(fragment.getClass()));
}
String tag = fragment.getClass().getName();
if (fragmentManager.getBackStackEntryCount() >= 1) {
String activeFragmentTag = fragmentManager
.getBackStackEntryAt(fragmentManager
.getBackStackEntryCount() - 1).getName();
Fragment activeFragment = fragmentManager
.findFragmentByTag(activeFragmentTag);
// Don't switch fragment if already active
if (activeFragment.getClass().equals(fragment.getClass())){
return;
}
//clear all except lowest
FragmentManager.BackStackEntry first = fragmentManager.getBackStackEntryAt(0);
fragmentManager.popBackStackImmediate(first.getId(), FragmentManager.POP_BACK_STACK_INCLUSIVE);
}
FragmentTransaction transaction = fragmentManager.beginTransaction()
.setCustomAnimations(transition1, transition2)
.replace(R.id.content_frame, fragment, tag);
if (fragment.getClass() != VaultsListFragment.class) {
transaction = transaction
.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN)
.addToBackStack(tag);
}
transaction.commit();
}
@Override
public void popAll() {
logger.debug("popAll()");
FragmentManager.BackStackEntry bse = mFragmentManager.getBackStackEntryAt(0);
mFragmentManager.popBackStack(bse.getId(), FragmentManager.POP_BACK_STACK_INCLUSIVE);
}
protected void changeFragment(Fragment fragment, String name, boolean isChild) {
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction transaction = fragmentManager.beginTransaction();
if (transaction.isAddToBackStackAllowed()) {
int count = fragmentManager.getBackStackEntryCount();
if (count > 0) {
FragmentManager.BackStackEntry entry =
fragmentManager.getBackStackEntryAt(count - 1);
if (entry != null && name.equals(entry.getName())) {
fragmentManager.popBackStack();
if (!isChild) {
// We just removed it's duplicate from the back stack
// And we want at least one in it
transaction.addToBackStack(name);
}
}
}
if (isChild) {
transaction.addToBackStack(name);
}
}
if (getResources().getBoolean(R.bool.hide_bottom_bar_on_second_level_views)) {
if (isChild) {
if (!isTablet()) {
hideTabBar();
}
} else {
showTabBar();
}
}
Compatibility.setFragmentTransactionReorderingAllowed(transaction, false);
if (isChild && isTablet()) {
transaction.replace(R.id.fragmentContainer2, fragment, name);
findViewById(R.id.fragmentContainer2).setVisibility(View.VISIBLE);
} else {
transaction.replace(R.id.fragmentContainer, fragment, name);
}
transaction.commitAllowingStateLoss();
fragmentManager.executePendingTransactions();
}