当屏幕方向发生变化时,我想在保留的Fragment
中运行一些代码。
我注意到这个问题的常见解决方案是this
但是,它会在Fragment
的初始设置上运行代码。我不希望这样。我只希望在发生方向更改时运行代码。
编辑:如果我使用onAttach()
,onActivityCreated()
或onCreate()
,则无关紧要。我仍然有同样的问题,我解释过,因为它们是在Fragment
的初始设置上运行的。
答案 0 :(得分:3)
保留片段的生命周期不同,因为我确定你注意到了。旋转设备时,不会调用保留片段的onCreate
。
相反,您可以覆盖onAttach
或onActivityCreated
并检查方向更改,因为它们是still called。
以下是检测方向更改的示例:
private int currentOrientation = -1;
public void onActivityCreated (Bundle savedInstanceState) {
int orientation = getResources().getConfiguration().orientation;
if(currentOrientation == -1) {
//first time here set orientation
currentOrientation = orientation;
} else if(currentOrientation != orientation) {
// orientation changed, execute custom code.
}
}
答案 1 :(得分:1)
According to the documents,由于未创建或销毁片段,因此只会省略onCreate
和onDestroy
。但是,始终会调用onActivityCreated
,onStart
和onAttach
。因此,您可以将该代码移动到其中一种方法中。如果您因为某种原因暂时删除了Fragment事件,那么跟踪以前的方向更改可能也是一件好事(因为将调用生命周期以便从Activity中分离)。