0

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

我有两个 main_activity.xml 文件,一个在布局中,一个在布局域中。但我试图从单个 MainActivity.java 文件中动态填充它们,但没有取得多大成功。我可以让它创建片段并显示布局,但我不能让它在“配置更改”中保留数据 - 即当方向改变时在编辑文本中显示相同的数据。

两种布局中使用的片段是相同的,但布局文件中的容器 ID 不同(即,我在布局土地版本中添加了“_wide”)。这相关吗?它们是否必须相同才能让系统“记住”它们?

我在理论上得到了片段,但在尝试实现它们时我只是不断地碰到一堵砖墙。我想要做的就是能够在运行时添加 x 个相同片段的实例(到线性布局容器中),但同时让系统负责维护状态信息。有可能还是我错过了有关这一切如何运作的一些基本信息?

4

2 回答 2

0

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

正确操作意味着: a) 在不同的“资源桶”中使用同名的布局文件,例如在“布局”、布局土地和其他任何地方的 main_activity.xml。b) 确保给定片段(或片段)的所有容器 ID 在所有各种布局文件中都相同。换句话说,一个片段只能与一个容器 id 相关联,但该 id 可以出现在许多布局文件中。我发现只有 id 本身必须相同 - 用作容器的视图组类型在布局文件中可以不同,与片段无关的任何其他内容也可以不同。c) 在 onCreate 方法中,您只需要实例化片段并将它们(通过片段事务)添加到它们的容器一次(即如果 savedinstancestate == null)。

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

于 2013-07-29T18:00:16.350 回答
0

在清单文件中使用以下行

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

喜欢

<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>

让我知道它是否有用?

于 2013-07-29T12:29:50.823 回答