2017-07-27 109 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

相關問題