2016-12-16 85 views
0
的onCreateView

我的應用程序有3個UI級別,每個級別具有它自己的片段,A - >乙 - > C. 我想任選允許我的應用程序用戶直導航到頂級片段,即從C - > A而不調用B.即,我仍然希望允許用戶從C-> B,如果他們按下後退按鈕,但在C片段中,我有一個「Home」按鈕,將它們直接帶到A.這是我想要衝刷後臺的操作。 此外,我希望用戶能夠使用後退按鈕從B-> A,因此我將A和B都添加到了後臺。清除片段返回堆棧而不調用彈出片段

我從this SO post嘗試過的選項,但在每種情況下,onCreateView被調用每一個片段,即使我用fm_.popBackStackImmediate(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);

也查了這個線程,似乎使用推薦popBackStackImmediate(null, FragmentManager.POP_BACK_STACK_INCLUSIVE)

誰能請建議一種方法來彈出整個後臺堆棧,而無需在彈出的片段上調用onCreateView?

回答

0

我估計你正在使用替換片段。 嘗試使用begintransaction.hide /節目管理1個活動中許多片段,如果你不希望popback

//on Activity 
FragmentTransaction fragmentTransaction = getSupportFragmentManager().beginTransaction(); 
fragmentTransaction.replace(containerId, new FragmentA(), fragmentA.getClass().getSimpleName()); 
fragmentTransaction.commit(); 
//inside fragment A to jump fragment without PopBackStack 
getFragmentManager().beginTransaction().hide(this).commit(); 
getFragmentManager().beginTransaction().show(new FragmentB()).commit(); 
+0

對不起我的帖子沒有當爲我工作充分記錄導航,我已經更新了。我迄今爲止發現的唯一解決方法是完全從後臺堆棧中跳過A,然後將代碼添加到B&C中,以便用戶在B/C中單擊「返回主頁」或按下從B的Android後退按鈕。但這是一個黑客,我寧願更清潔的方式沖洗後臺堆棧,而無需在B或A上調用onCreateView。 – user90766

1

不要添加堆棧中一行從片段去B->ç

而從A-去>乙使用

HighlightFragment highlightFragment=new HighlightFragment(FirstReaderScreen.this); 
    getSupportFragmentManager() 
    .beginTransaction() 
    .add(R.id.LL_Fragment, highlightFragment) // LL_Fragment is container 
    .addToBackStack(null) 
    .commit(); 

當去B-> C使用

HighlightFragment highlightFragment=new HighlightFragment(FirstReaderScreen.this); 
     getSupportFragmentManager() 
     .beginTransaction() 
     .add(R.id.LL_Fragment, highlightFragment) 
     .commit(); 

不加線.addtobackstack(空)

這爲我工作

+0

對不起,我的文章沒有完全記錄工作流程。我已更新它來解釋完整的導航。我不能跳過從後臺添加A或B. – user90766

+0

參考http://stackoverflow.com/questions/7992216/android-fragment-handle-back-button-press和http://stackoverflow.com/questions/5448653/how-to-implement-onbackpressed-in-fragments,爲了處理碎片 – Redman

+0

,我已經在處理後退按鈕了,正如上面所解釋的,我的問題是C - > A中的「Go to Home」導航,我想在不調用B上的onCreateView的情況下刷新後臺堆棧。 – user90766

0

這需要以清除選項卡切換回堆棧BottomNavigationView

public void clearBackStack() { 

    int backStackEntryCount = mFragmentActivity 
            .getSupportFragmentManager() 
            .getBackStackEntryCount(); 

    for (int i = 0; i < backStackEntryCount; i++) { 
     mFragmentActivity.getSupportFragmentManager().popBackStack(); 
    } 
}