如何确定在多个布局之间切换的活动上次使用的布局?

时间:2013-07-26 22:52:01

标签: android android-layout android-fragments android-activity

我刚开始在我的应用程序中使用片段,这个想法是一列用于一定宽度(或更小)的屏幕,两个用于更宽的屏幕。所以我有两个单独的布局文件,在MainActivity的onCreate方法中,我根据屏幕宽度选择显示哪一个。由于我对屏幕宽度而不是方向感兴趣,所以我不能使用'layout-land'这个更简单的选项。两种布局都使用相同的片段,但它们不能硬编码到布局文件中,因为其中一些需要添加 在运行时添加和删除 - 因此我在onCreate方法中使用片段事务(目前)只添加片段。

当活动被销毁并重新创建时,问题就出现了。如果我不检查savedinstancestate是否为null,它会再次添加片段(这是预期的)并且所有内容都加倍。但是如果我只创建代码时它是null - 就像你只有一个布局那样 - 那么当我再次测试屏幕宽度并且只使用setContentView(一个或另一个布局)时,它会重新创建一个没有问题的那个但另一个是空白的。再次这是可以预料的,因为第二个尚未实例化。那么是否可以从已保存的实例状态确定活动被销毁时使用的布局?如果是,是否可以(或安全)使用其中的信息来创建其他布局 - 或者我应该再次运行创建代码?换句话说,当使用多个布局时,标准的savedinstancestate是否会保留我需要的所有数据,还是我必须自己完成所有这些?

1 个答案:

答案 0 :(得分:0)

您仍然可以使用资源存储桶来包含布局。即:

使用/ layout-sw600dp /布局最小宽度为600 dip

从官方文档中 http://developer.android.com/training/multiscreen/screensizes.html#TaskUseSWQuali

res / layout / main.xml,单窗格(默认)布局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <fragment android:id="@+id/headlines"
              android:layout_height="fill_parent"
              android:name="com.example.android.newsreader.HeadlinesFragment"
              android:layout_width="match_parent" />
</LinearLayout>

res / layout-sw600dp / main.xml,双窗格布局:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="horizontal">
    <fragment android:id="@+id/headlines"
              android:layout_height="fill_parent"
              android:name="com.example.android.newsreader.HeadlinesFragment"
              android:layout_width="400dp"
              android:layout_marginRight="10dp"/>
    <fragment android:id="@+id/article"
              android:layout_height="fill_parent"
              android:name="com.example.android.newsreader.ArticleFragment"
              android:layout_width="fill_parent" />
</LinearLayout>