重点主要是讲:在屏幕切换时,然后通过设置一些属性,避免Activity重走生命周期,也就是在屏幕切换时,原本Activity会在屏幕切换的同时对之前的Activity销毁,然后再走一次生命周期建立Activity,这样的话,在我通过ActionBar开发一个有Tab导航选项栏的应用程序的时候(每个Tab选项的内容对应一个Fragment对象获取的布局展现的资源,Fragment的生命周期是跟随其宿主Activity生命周期改变的)。应用程序启动时,默认是开启第一个Tab选项的内容(即tab1被点击显示),然后再点击展现tab2,展现布局内容,这时候tab1失去点击操作,自然的,其相关资源也就消失了。当我把手机屏幕旋转时,问题出现了,tab1和tab2(tab2出现是正常的预想状态)的布局资源同时出现了。而我们的要求是只出现tab2。
说了这么多废话,上面的问题是怎么出现的呢?其实解决办法很简单(就是令Activity在屏幕旋转时,避免重走其生命周期),在AndroidManifest.xml文件里的<activity/>中添加Android:configChanges="orientation|keyboardHidden"属性(android2.3之前的版本),然后在类里覆写onConfigurationChanged()方法。好了,本人兴高采烈地去试了,尼玛啊,搞了半天,打了一上午的log找问题。还是没解决。
最后终于蛋疼地知道,原来android4.0系统,已经做了改变,因为当你切换屏幕时,屏幕尺寸也相应的改变了(这点可以从ActionBar菜单栏在横屏和竖屏上的展现看出来),所以其设置方式当然也会改变,应在<Activity/>中添加Android:configChanges="orientation|screenSize“(android3.0以后的版本)。然后在Activity类里覆写onConfigurationChanged()方法。