我正在尝试将布局从完整视图切换到双窗格视图,如下所示:
....... .......
. . . .
. . --> .......
. . . .
....... .......
现在的问题是我将从带有片段的1个容器转到2个容器,每个容器中都有一个片段。为了做到这一点,我正在删除旧片段并添加新片段。但是当我删除大片段时,会出现一个OLD片段。我在旧片段上设置了标记,然后用getFragmentManager().findFragmentByTag()
搜索它,但它只返回null。
现在我的hack是使用largeView.setVisibility(View.gone);有没有更好的方法来解决这个问题?
修改:
似乎这个bug不再被复制了。这意味着替换应该做它应该做的一直。但是为什么会出现故障?日食?的Android?
EDIT2
这就是我替换片段的方式:
Fragment fragment = new SimpleScannerFragment();
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.replace(R.id.main_container, fragment, SCAN_FRAGMENT_TAG);
ft.commit();
在切换到双窗格布局之前,我会像这样弹出堆栈:
getFragmentManager().popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
我使用这个删除片段:
removeFragment = getFragmentManager().findFragmentByTag(SCAN_FRAGMENT_TAG);
if(removeFragment != null) {
getFragmentManager().beginTransaction().remove(removeFragment).commit();
}
当我从单一窗格转到双窗格时,我正在切换视图可见性:
// hide main layout as well, THIS IS MY HACKS just in case it does this again...
FrameLayout frame = (FrameLayout) this.findViewById(R.id.main_container);
frame.setVisibility(View.GONE);
// add new layout
FragmentTransaction ft = getFragmentManager().beginTransaction();
CustomMapFragment fragment = CustomMapFragment.newInstance();
ScoreFragment scoreFragment = new ScoreFragment();
ft.replace(R.id.main_narrow_bot_container, fragment);
ft.replace(R.id.main_narrow_top_container, scoreFragment);
ft.commit();
答案 0 :(得分:1)
如何尝试清除整个后台?
private void clearBackStack(){
FragmentManager fragmentManager = getFragmentManager();
fragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
fragmentManager.popBackStackImmediate();
}
答案 1 :(得分:0)
你只需要获得FragmentManager的实例。
然后使用这条神奇的线条。
fm.replace(R.id.fragment_main, frag).commit();
答案 2 :(得分:0)
替换方法被窃听(至少是API19)。最好使用添加和删除的组合。 但我不确定它是否已在API21中修复。
答案 3 :(得分:0)
使用此方法,您可以删除与FragmentManager关联的所有片段的backStack:
FragmentManager fm = getActivity().getSupportFragmentManager();
for(int i = 0; i < fm.getBackStackEntryCount(); ++i) {
fm.popBackStack();
}
如果要删除与childFragmentManager或SupportFragmentManager关联的所有片段,则类似。
希望它可以帮到你!!