Android 布局更改时,系统是否保留动态添加片段的状态信息?

Android 布局更改时,系统是否保留动态添加片段的状态信息?,android,android-layout,android-fragments,android-activity,Android,Android Layout,Android Fragments,Android Activity,我正在编写一个应用程序,其中一些片段需要动态添加,因此不能在布局文件中定义 我有两个主要的_activity.xml文件,一个在layout中,一个在layout land中。但我试图从单个MainActivity.java文件中动态填充它们,但没有多大成功。我可以让它创建片段并显示布局,但我无法让它在“配置更改”中保存数据,即在方向更改时在edittext中显示相同的数据 两个布局中使用的片段相同,但布局文件中的容器ID不同(即,我将“_-wide”添加到布局区域版本)。这是否相关?它们必须是

我正在编写一个应用程序,其中一些片段需要动态添加,因此不能在布局文件中定义

我有两个主要的_activity.xml文件,一个在layout中,一个在layout land中。但我试图从单个MainActivity.java文件中动态填充它们,但没有多大成功。我可以让它创建片段并显示布局,但我无法让它在“配置更改”中保存数据,即在方向更改时在edittext中显示相同的数据

两个布局中使用的片段相同,但布局文件中的容器ID不同(即,我将“_-wide”添加到布局区域版本)。这是否相关?它们必须是相同的,系统才能“记住”它们吗


理论上我得到了一些片段,但在尝试实现它们时,我总是遇到困难。我只想在运行时添加x个相同片段的实例(到linearlayout容器中),但同时让系统负责维护状态信息。是否有可能或者我遗漏了一些关于所有这些工作原理的基本信息?

在清单文件中使用下面的行

android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize"



让我知道它有用与否?

最终到达了那里。所以我最初的问题的答案是肯定的,系统确实记住了动态添加的片段的状态信息——如果你做得对的话

正确行事意味着: a) 在不同的“资源桶”中使用相同名称的布局文件,例如“布局”、“布局栏”中的main_activity.xml以及其他任何地方。 b) 确保给定片段(或多个片段)的所有容器ID在所有不同的布局文件中都相同。换句话说,片段只能与一个容器id关联,但该id可以出现在许多布局文件中。我发现只有id本身必须相同——用作容器的视图组类型在布局文件中可能不同,与片段无关的任何其他类型也可能不同。 c) 在onCreate方法中,您只需要实例化片段并将它们(通过片段事务)添加到它们的容器中一次(即如果savedinstancestate==null)。您可以通过这种方式动态创建整个UI—包括使用片段数组—系统会记住每个片段的所有状态信息,并将其应用于它使用的下一个布局文件


如果这对每个人来说都是显而易见的,我很抱歉,但我需要澄清。

如果您使用不同的ID,您必须在源代码中专门处理它。您好。谢谢你的回复。我不认为您可以在这里提出任何问题,为如何实现这一点提供很好的示例?通常,在ConfigChanged上,活动生命周期从oncreate重新开始。因此,请使用android:configChanges=“keyboard | keyboardHidden | orientation | screenLayout | uiMode | Screen Size | Smallest Screen Size”这一行来阻止它。请耐心听我说,我需要对它进行一些处理——我的其余代码可能需要一些工作。我会让你知道:-)它对一种布局有效,但不会切换到另一种布局。它还可以在我的测试手机上的Eclipse安装中持久化,这是我以前从未见过的。我的片段实例化代码在onCreate中-应该在其他地方吗?很好,您已经通过自己的答案得到了解决方案(在下面一个答案中),对吗?请澄清我,您是否在自己的答案中使用android:configChanges=“键盘|键盘隐藏|方向|屏幕布局| uiMode |屏幕大小|最小屏幕大小”?。事实上,我没有50个知名度可以对你的回答加上评论。你好。我的解决方案不使用android:configChanges或onConfigurationChanged。我不能让他们工作-这不是对你或你的答案的反思。。。我只是还不是一个高级的安卓程序员。我的“解决方案”并不是什么新鲜事——可能是每个人都是这样做的——但我只需要在自己的头脑中澄清一下。
<application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name="com.example.demo.MainActivity"
        android:label="@string/app_name"
        android:configChanges="keyboard|keyboardHidden|orientation|screenLayout|uiMode|screenSize|smallestScreenSize" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
</application>