FragmentPagerAdapter保存他的状态,但不应该

时间:2015-04-04 07:55:16

标签: android android-fragments android-viewpager fragmentpageradapter

我有一个奇怪的" bug"在我的应用程序中这是建筑: 我们有一个带有几个片段的NavigationDrawer(就像每个应用程序一样)。一些片段(例如Canteen-Frag)包含带有FragmentPagerAdapter的ViewPager。众所周知,ViewPager是懒惰的,只创建了可见片段以及他的邻居。

现在,问题出在这里: 如果我们打开Ca​​nteen-Frag,使用后退按钮导航并再次打开News-Frag,可见的碎片以及邻居都消失了。

您可以在此处查看主视图:https://lh5.ggpht.com/0KJCniup8zvFk05QAtzeQpoClKZnaSzaPepgeLwsToPNmTGJnRRj31PLhumw_DGD2Q=h900-rw

这里的食堂:https://lh5.ggpht.com/81EnVDrlqONgE0V1i5UDw3c2cbEJcMZ0PLX0zB_syBeawHWQ5OfLtpeapZqAHRhZ2w=h900-rw

(两者都是" myHHU" -App)的Playstore的图像链接

大家都知道,为什么ViewPager或FragmentPagerAdapter会缓冲他的状态,即使我从未为此目的编写代码?我知道,如果没有我的代码,这很难回答,但应用程序更大(它是杜塞尔多夫的官方大学应用程序)。

如果有人需要更多信息,请写/问:)

THX。

1 个答案:

答案 0 :(得分:0)

幸运的是答案在Remove Fragment Page from ViewPager in Android:)

问题是,FragmentManager本身会保存旧片段,因此我们必须“操纵”片段的ID:)

此外,由于内存问题,我们应该清除后台堆栈。这是一个例子:

@Override
public void onPause() {
    clearBackStack();
    super.onPause();
}

private void clearBackStack() {
    FragmentManager manager = getFragmentManager();
    if (manager.getBackStackEntryCount() > 0) {
        FragmentManager.BackStackEntry first = Manager.getBackStackEntryAt(0);
        manager.popBackStack(first.getId(), FragmentManager.POP_BACK_STACK_INCLUSIVE);
    }
}