我有一个通过编程方式添加的片段。然而,我发现在旋转之后,新的片段被创建,但旧的片段仍然存在(尽管没有显示)。我认为在旋转时,片段会随着活动一起被销毁,但这里并非如此。是什么导致我的片段被保留/未被销毁?
请注意:
- 我没有设置setRetainInstance。
- 片段未在activity onCreate中添加(而是在稍后点击按钮时添加)。
- 我可以看到Activity在旋转时调用了onDestroy。
- 虽然片段已经添加,它遮挡了添加按钮,并且只有在我执行“remove”操作时才会被解除。
创建该片段的代码:
MyFragment fragment = MyFragment();
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.add(R.id.content_frame, fragment, "CurrentFragment");
fragmentTransaction.show(fragment).commit();
移除片段的代码:
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
fragmentTransaction.remove(fragment).commit();
更新: 我不能确认这是否是问题的原因,但是该碎片在onCreate中注册为LocalBroadcast接收器。它在onDestroy中注销广播,但似乎LocalBroadcast注册导致了onDestroy无法被调用,或者旋转时没有调用onDestroy。现在我在onStop中注销,这似乎解决了问题。