2015-06-21 46 views
0

我有一个3片段的活动。第一个片段不会添加到后台堆栈中。所以,我的导航是:在活动中跳过片段?

A - >乙 - > C,或 A - >ç

我实现onNavigateUp从堆栈中取出碎片和它的作品。

我还在操作栏上有一个按钮,它清除碎片中的信息并切换到第一个碎片。

如果我在第三个片段中,然后单击该按钮转到第一个片段,将片段替换为足以从后台堆栈中删除第二个和第三个片段,或者我也应该调用getFragmentManager().popBackStack()

编辑

我加入这个代码移回第一个片段:

getFragmentManager().popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE); 
switchFragment(fragmentA, false); 

fragmentA.clear(); 

而且所有switchFragment所做的是:

protected void switchFragment(Fragment fragment, boolean addToBackStack) { 
    FragmentTransaction ft = getFragmentManager().beginTransaction(); 
    ft.replace(R.id.container_fragments, fragment, fragment.getClass().getSimpleName()); 

    if (addToBackStack) { 
     ft.addToBackStack(fragment.getClass().getSimpleName()); 
    } 

    ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE); 
    ft.commit(); 

    currentFragment = fragment; 
} 

然而,即使fragmentA.clear()被称为,textviews不清除。

是否因为片段仍然创建?

回答

0

Basicaly来说,当你调用由FragmentTransaction替换默认AndroidOS只会

删除现有的片段。如果将其添加到容器,则其视图 也会从该容器中移除。

here

,不会pushpop什么/从BackStack。所以,如果你是

第三片段

,然后点击按钮进入到第一

如果您曾呼吁addToBackStack()之前,那么你应该叫popBackStack()过,如果你不叫addToBackStack()之前您无需拨打popBackStack()即可清除BackStack