在Android中替换片段的奇怪行为

时间:2015-08-05 13:29:51

标签: android android-fragments fragmentmanager

我在一个应用程序中工作了几个月。上传到Playstore的版本运行正常。最近,做了一些改进,整个应用程序开始以一种非常奇怪的方式工作。

如果你在片段之间切换,过了一段时间它不会正确地膨胀片段,总是放入第一个片段的内容。因此,如果您切换片段,操作栏会更改但内容始终相同(并且您无法与其进行交互)。

以下是错误https://streamable.com/9exa

的快速视频

我发疯了,因为没有任何记录或痕迹。

我使用通常的切换片段的方式,最有趣的部分是在开始时一切正常:

Fragment fragment = getSelectedFragment(index); // returns the desired fragment
FragmentManager fragmentManager = getFragmentManager();

//Pop backstack
for(int i = 0; i < fragmentManager.getBackStackEntryCount(); ++i) {
    fragmentManager.popBackStack();
}

fragmentManager.beginTransaction()
               .replace(R.id.container, fragment)
               .addToBackStack(null)
               .commit();

有没有人知道这里会发生什么?谢谢!

编辑:我也尝试过清除后台堆栈以防问题,但它不会改变任何内容

已解决:正如我在回答中解释的那样,我发现这是一个与SwipeRefreshLayout相关的问题。有关此问题的详细信息,请参阅When switch fragment with SwipeRefreshLayout during refreshing, fragment freezes but actually still work

3 个答案:

答案 0 :(得分:3)

好的,我发现了问题。

似乎SwipeRefreshLayout导致了所有问题。我的一个片段正在使用它,并且在切换片段几次之后就会卡住它。

删除它或禁用它 setEnabled(false)解决了所有问题。

我希望它会对遇到同样问题的人有所帮助!

SO中的另一个线程引用了同样的问题:When switch fragment with SwipeRefreshLayout during refreshing, fragment freezes but actually still work

答案 1 :(得分:0)

您使用的是哪些片段?

我使用框架片段有一些奇怪的行为,我切换到V4,一切正常

答案 2 :(得分:0)

请检查此链接:FragmentManager popBackStack doesn't remove fragment

我在我的活动中使用以下代码来切换片段,它工作正常。我的应用程序的minSdkVersion是15。

    private void setFragment(Fragment fragment) {
        FragmentManager fragmentManager = getSupportFragmentManager();
        FragmentTransaction fragmentTransaction =
            fragmentManager.beginTransaction();
        fragmentTransaction.replace(R.id.container, fragment);
        fragmentTransaction.commit();
    }