我有layout/activity_main.xmllayout-land/activity_main.xml。当我改变方向时,活动会重新加载。
我尝试使用这段代码android:configChanges="keyboardHidden|orientation",它起作用了,活动并不是像我喜欢的那样重新加载,但问题是布局没有从layout/activity_main.xml切换到layout-land/activity_main.xml
如何从layout/activity_main.xml切换到layout-land/activity_main.xml。不刷新活动。

最佳答案

通过声明android:configChanges="orientation|screenSize"可以指示活动管理器不要重新启动活动,并允许您通过onConfigurationChanged()处理配置更改。
如果您的应用程序在特定配置更改期间不需要更新资源,并且您的性能限制要求您避免活动重新启动,则可以声明您的活动自行处理配置更改,这会阻止系统重新启动您的活动。
资料来源:http://developer.android.com/guide/topics/resources/runtime-changes.html
这意味着配置更改时将跳过onCreate(),并且您不能交换布局(因为onCreate()是重新创建视图的位置)。
在您的情况下,您希望更改布局,因此除了刷新活动之外别无选择,这意味着删除android:configChanges="orientation|screenSize"。如果您想保持状态,您可以保存并检查传递给您的BundleonCreate()以相应地恢复状态。

@Override
protected void onCreate(Bundle savedInstanceState) {
    ...
    // set your layoutId according to landscape/portrait
    setContentView(layoutId);
    if (savedInstanceState != null) {
        // restore your state here
    }
    ...
}

@Override
protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    // save your state here
}

更多参考:http://developer.android.com/training/basics/activity-lifecycle/recreating.html

关于android - Android防止更改方向刷新,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28802028/

10-11 22:26
查看更多