0

私は自分のアプリでフラグメントを使い始めたばかりで、アイデアは、特定の幅 (またはそれ以下) の画面用に 1 列、より広い画面用に 2 列です。したがって、2 つの個別のレイアウト ファイルがあり、MainActivity の onCreate メソッドで、画面の幅に基づいてどちらを表示するかを選択します。画面の向きではなく幅に関心があるため、より単純なオプションである「layout-land」は使用できません。どちらのレイアウトも同じフラグメントを使用しますが、レイアウト ファイルにハード コードすることはできません。なぜなら、それらの一部は実行時に追加および削除する必要があるためです。フラグメント。

問題は、アクティビティが破棄されて再作成されたときに発生します。savedinstancestate が null であるかどうかを確認しないと、フラグメントが再び追加され (これは予想されることです)、すべてが倍増します。しかし、レイアウトが1つしかない場合のように、nullの場合にのみ作成コードを実行すると、画面幅を再度テストして setContentView(one or the other layout) を使用すると、表示されたものを問題なく再作成しますしかし、もう一方は空白です。2 番目のものはまだインスタンス化されていないため、これも当然のことです。アクティビティが破棄されたときにどのレイアウトが使用されていたかを、保存されたインスタンスの状態から判断することは可能ですか? もしそうなら、その中の情報を使用して他のレイアウトを作成することは可能ですか (または安全ですか?)、または作成コードを再度実行する必要がありますか? 言い換えれば、標準のsavedinstancestateは、複数のレイアウトが使用されている場合に必要なすべてのデータを保持しますか、それともすべて自分で行う必要がありますか?

4

1 に答える 1

0

リソース バケットを使用して、レイアウトを含めることができます。すなわち:

layout-sw600dp600ディップのレイアウト最小幅である/ / を使用

公式ドキュメントから 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、2 ペイン レイアウト:

<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>
于 2013-07-26T23:57:06.617 に答える