2016-12-16 86 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(); 
    } 
}