有没有办法让保留的片段知道屏幕方向何时被更改?

时间:2016-02-02 18:49:30

标签: android android-fragments fragment

当屏幕方向发生变化时,我想在保留的Fragment中运行一些代码。

我注意到这个问题的常见解决方案是this

但是,它会在Fragment的初始设置上运行代码。我不希望这样。我只希望在发生方向更改时运行代码。

编辑:如果我使用onAttach()onActivityCreated()onCreate(),则无关紧要。我仍然有同样的问题,我解释过,因为它们是在Fragment的初始设置上运行的。

2 个答案:

答案 0 :(得分:3)

保留片段的生命周期不同,因为我确定你注意到了。旋转设备时,不会调用保留片段的onCreate

相反,您可以覆盖onAttachonActivityCreated并检查方向更改,因为它们是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,由于未创建或销毁片段,因此只会省略onCreateonDestroy。但是,始终会调用onActivityCreatedonStartonAttach。因此,您可以将该代码移动到其中一种方法中。如果您因为某种原因暂时删除了Fragment事件,那么跟踪以前的方向更改可能也是一件好事(因为将调用生命周期以便从Activity中分离)。