【问题标题】:Change Layout in Landscape with out destroying and recreating Activity在不破坏和重新创建活动的情况下更改横向布局
【发布时间】:2013-02-25 20:22:04
【问题描述】:

大家好,我是 android 新手,遇到了方向问题在不破坏和重新创建 Activity 的情况下旋转到横向

请帮我解决这个问题

提前致谢

【问题讨论】:

    标签: android android-orientation


    【解决方案1】:

    作为一名长期的 Android 程序员,我的建议是:

    不要这样做!

    让活动被销毁并使用正确的布局重新构建。

    只需搜索和研究在方向更改期间保留数据的所有几种方法,并将它们应用于您的具体案例。下面几个来说明:

    1. onCreate(Bundle) 接收包含在 onSavedInstances(Bundle) 期间保存的信息的包;
    2. 使用没有 UI 的片段(不要调用 onCreateView)并将其设置为在使用 setRetainInstance(true) 进行旋转时保留,并使用它来记住数据
    3. 使用Loader pattern 自动接收它在上一个活动中生成的数据

    【讨论】:

    • 感谢 Budius,但当我解锁 configchanges 时显示 android.view.inflateException,我的应用程序崩溃了
    • 因此您应该尝试修复该错误,而不是创建一个完全违背平台为您提供的所有不错的自动化方法的 hack。
    • 如果我解锁方向配置更改,我会遇到性能问题,因为它需要再次重新加载复杂的列表片段
    • 这听起来像是使用我在第 3 项中提到的加载器的情况。
    【解决方案2】:

    替换

    layout-large-land
    

    layout-land-large
    

    防止活动重新创建/销毁

    AndroidManifest.xml 文件中的活动声明中添加属性android:configChanges="orientation"

    android:configChanges 属性的目的是防止在真正需要时重新创建活动。

    让我知道它是否适合你..

    【讨论】:

    • 我在该文件夹上收到错误标记,我尝试运行“您的项目包含错误,请在运行前修复它们”
    • 希望您在 res 文件夹中创建了文件夹?
    • 在该文件夹中创建一个布局文件并尝试运行它
    • iam 使用 ADT Bundle (Eclipse JUNO) 进行创建
    【解决方案3】:

    试试这个,

    在每个活动的 mainfest.xml 中添加此代码。

    android:ConfigChanges="keyboardHidden|orientation"   
    

    【讨论】:

    • 我做了同样的事情,但是当设备旋转到横向时我需要更改布局
    • 这是一种反模式,必须劝阻。您必须管理重新创建活动的场景,因为它不仅发生在设备旋转时,而且发生在 SO 杀死活动以释放内存时。使用 Loaders 或 ViewModel 和 Lifecycle 组件管理您的布局配置更改和活动重新创建。
    猜你喜欢
    • 1970-01-01
    • 2014-10-18
    • 1970-01-01
    • 2016-04-29
    • 2011-12-29
    • 1970-01-01
    • 2018-02-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多