Android 请使用以下代码行:- @Override public void onBackPressed() { if ( getSupportFragmentManager().getBackStackEntryCount() > 0){ fm.popBackStack(); }else { super.onBackPressed(); } }

Android 请使用以下代码行:- @Override public void onBackPressed() { if ( getSupportFragmentManager().getBackStackEntryCount() > 0){ fm.popBackStack(); }else { super.onBackPressed(); } },android,android-fragments,fragment,Android,Android Fragments,Fragment,要在片段中获得backStack功能,请在执行如下片段事务时使用.addToBackStack(null):- getSupportFragmentManager() .beginTransaction() .replace(R.id.YOUR_CONTAINER, YOUR_FRAGMENT,"TAG") .addToBackSt

要在
片段
中获得backStack功能,请在执行如下片段事务时使用
.addToBackStack(null)
:-

           getSupportFragmentManager()
                        .beginTransaction()
                        .replace(R.id.YOUR_CONTAINER, YOUR_FRAGMENT,"TAG")
                        .addToBackStack(null) /// IT IS NECESSARY TO GET THE BACK STACK PROPERTY IN YOUR FRAGMENT
                        .commitAllowingStateLoss();

@VassilisPallas先生的可能副本您能解释一下如何解决我的问题吗?您当前的实现中显示了什么?@amshear如果GetBackbackEntryCount()大于0,不适用于Loop可能重复@VassilisPallas先生的问题您能解释一下如何解决我的问题吗?您当前的实现中显示了什么?@amshear如果GetBackBackBacksetEntryCount()大于0,则不适用于Loop您的答案对我有效。唯一的问题是如果(应该添加)。。如果片段已经存在,则无需添加片段。。。如何处理..通过获取片段的标记..您可以重用堆栈中以前的片段。为此,您必须在添加或替换片段时传递“标记”。您的答案对我有用。唯一的问题是如果(应该添加)。。如果片段已经存在,则无需添加片段。。。如何处理..通过获取片段的标记..您可以重用堆栈中以前的片段。为此,您必须在添加或替换片段时传递“标记”。
 private Stack<Fragment> stack = new Stack<Fragment>();
 public void pushFragments(Fragment fragment, boolean shouldAnimate,
                          boolean shouldAdd) {

    drawerClose = false;
    if (shouldAdd)
        stack.push(fragment);

    this.changeFragment = fragment;
    invalidateOptionsMenu();
    changeFragment(fragment, shouldAnimate, false);
}

public void popFragments() {
    /*
     * Select the second last fragment in current tab's stack.. which will
     * be shown after the fragment transaction given below
     */
    Fragment fragment = stack.elementAt(stack.size() - 2);
    // / pop current fragment from stack.. /
    stack.pop();
    /*
     * We have the target fragment in hand.. Just show it.. Show a standard
     * navigation animation
     */
    this.changeFragment = fragment;
    invalidateOptionsMenu();
    changeFragment(fragment, false, true);
}

private void changeFragment(Fragment fragment, boolean shouldAnimate, boolean popAnimate) {
    FragmentManager manager = getSupportFragmentManager();
    FragmentTransaction ft = manager.beginTransaction();
    if (shouldAnimate)
        ft.setCustomAnimations(R.anim.slide_in_right,
                R.anim.slide_out_left);
    if (popAnimate)
        ft.setCustomAnimations(R.anim.slide_in_left,
                R.anim.slide_out_right);

    ft.replace(R.id.content_frame, fragment);
    ft.commit();
}
//On BackPress just check this thing
    private void backManage() {
    if (stack.size() > 1) {
        popFragments();
    }
}
@Override
public void onBackPressed() {
    if(check_if_backstack_is_null)
        super.onBackPressed();
    else
    {
      popupFromBackstack();
    }
}
getFragmentManager().beginTransaction().replace(fragmentContainer.getID(), fragment)
.addToBackStack(null).commit();`
@Override
public void onBackPressed() {
  if (fragment != null && fragment.getChildFragmentManager().getBackStackEntryCount() > 0){
     fragment.getChildFragmentManager().popBackStack();
  }else {
    super.onBackPressed();
   }
}
    @Override
    public void onBackPressed() {
      if ( getSupportFragmentManager().getBackStackEntryCount() > 0){
         fm.popBackStack();
      }else {
        super.onBackPressed();
       }
    }
           getSupportFragmentManager()
                        .beginTransaction()
                        .replace(R.id.YOUR_CONTAINER, YOUR_FRAGMENT,"TAG")
                        .addToBackStack(null) /// IT IS NECESSARY TO GET THE BACK STACK PROPERTY IN YOUR FRAGMENT
                        .commitAllowingStateLoss();