Handle states of orientation changes

2019-02-15 10:24发布

How can I handle all states of orientation event occurs?

Something like:

  • before starting (save some screen states)
  • when happening (animation purposes)
  • after it's happen (load the screen state)

I know that onConfigurationChanged can handle orientation changes. And I tried this:

    public void onConfigurationChanged(Configuration cfg) {
        saveState();

        super.onConfigurationChanged(cfg);

        loadState();
    }

On saveState I store the lastIndex viewed on the Gallery on SharedPreferences. On loadState I get the lastIndex from the SharedPreferences and make it as the current on the Gallery.

I tried also put loadState in the onResume method but it's not called after the orientation change occurs.

2条回答
2楼-- · 2019-02-15 11:08

You may be a little confused.

This is from the api docs:

public void onConfigurationChanged (Configuration newConfig) Called by the system when the device configuration changes while your activity is running. Note that this will only be called if you have selected configurations you would like to handle with the configChanges attribute in your manifest.

If you've specified the parameter in your AndroidManifest, the system will notify you of orientation change by calling onConfigurationChanged(). If you did not set the flag, then Android will kill your activity start a new one with a proper orientation and then call onResume().

If you want to be notified when activity finished orientation changed and is all laid out, I would recommend overriding an onDraw() method in one of your child views. By then everything is done and you could for instance restore the state from before the orientation change.

HTH.

查看更多
疯言疯语
3楼-- · 2019-02-15 11:24

before starting (save some screen states)

Use onSaveInstanceState() and/or onRetainNonConfigurationInstance() and/or a fragment on which you have called setRetainInstance(true)

when happening (animation purposes)

That is handled by the OS.

after it's happen (load the screen state)

Use onRestoreInstanceState() and/or getLastNonConfigurationInstance() (if you went the fragment route, your data is just naturally still there)

I know that onConfigurationChanged can handle orientation changes.

@EightEight's answer covers this nicely.

查看更多
登录 后发表回答