2017-07-27 108 views
0

我现在有3个片段。一个是主要片段第二个是配置文件片段,第三个是配置文件编辑片段如何导航到上一个弹出片段从下一个片段?

MainFragment被称为像这样:

 fragmentManager = getSupportFragmentManager(); 
    DashboardFragment fragment1 = new DashboardFragment(); 
    Bundle bundle = new Bundle(); 
    fragment1.setArguments(bundle); 
    fragmentManager.popBackStack(null,FragmentManager.POP_BACK_STACK_INCLUSIVE); 
    fragmentManager.beginTransaction().replace(R.id.frame, fragment1, "DASHBOARD_FRAGMENT").commitAllowingStateLoss(); 

现在从主片段要前往文件片断这样。

   fragmentManager = ((MainActivity)(mContext)).getSupportFragmentManager(); 
       ProfileFragment fragment1 = new ProfileFragment(); 
       Bundle bundle = new Bundle(); 
       fragment1.setArguments(bundle); 
       fragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE); 
       fragmentManager.beginTransaction().replace(R.id.frame, fragment1, "PROFILE_FRAGMENT").addToBackStack("B").commit(); 

现在从轮廓片段要前往的档案编辑片段是这样的:

fragmentManager = getActivity().getSupportFragmentManager(); 
      ProfileEditFragment fragment1 = new ProfileEditFragment(); 
      Bundle bundle = new Bundle(); 
      fragment1.setArguments(bundle); 
      fragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE); 
      fragmentManager.beginTransaction().add(R.id.frame, fragment1, "PROFILE_EDIT_FRAGMENT").addToBackStack("C").commit(); 

现在导航就像是从主片段文件片断,并从配置文件片段的档案编辑片段。

现在,当我从配置文件编辑片段中按回时,它直接进入显示空白的主片段。我想要从配置文件编辑片段返回到配置文件片段,然后返回到主要片段。

为此,我在主要活动中使用了onBackPressed方法,但其效果不佳。

@Override 
public void onBackPressed() { 

    // Do nothing if the back button is disabled. 
    if (!mBackPressCancelled) { 


     if (getFragmentManager().getBackStackEntryCount() > 0) { 
      getFragmentManager().popBackStackImmediate(); 
     } 
     else { 
      super.onBackPressed(); 

     } 
    } 
} 

怎么回事?请帮忙。谢谢你..

回答

2

你必须添加DashboardFragment也回栈。

fragmentManager.beginTransaction().replace(R.id.frame, fragment1, "DASHBOARD_FRAGMENT").addToBackStack("A").commitAllowingStateLoss(); 

另外,更改onBackPressed()中的if条件。所以,它会在你的背部至少保留一个片段。

if (getFragmentManager().getBackStackEntryCount() > 1) { 
     getFragmentManager().popBackStackImmediate(); 
} else { 
    super.onBackPressed(); 
} 

此外,replace()前删除所有popBackStack()。当您需要将碎片保存在堆栈中时,不需要此行。

+0

还是我要去主要的片段,它是空白的。我试图添加片段而不是替换,但不工作。 – Sid

+0

对不起。我忘了说你需要在replace()之前删除所有'popBackStack()' – BakaWaii