0

私はアプリを書いていますが、一部のフラグメントを動的に追加する必要があるため、レイアウト ファイルで定義されていません。

私が持っているのは、2 つの main_activity.xml ファイルです。1 つはレイアウトに、もう 1 つはレイアウトランドにあります。しかし、私はそれらを単一の MainActivity.java ファイルから動的に設定しようとしていますが、あまり成功していません。フラグメントを作成してレイアウトを表示することはできますが、「構成の変更」を超えてデータを保持することはできません。つまり、向きが変わったときに編集テキストに同じデータを表示することはできません。

両方のレイアウトで使用されるフラグメントは同じですが、レイアウト ファイルのコンテナー ID が異なります (つまり、レイアウト ランド バージョンに '_wide' を追加します)。これは関連していますか?システムがそれらを「記憶」するには、それらは同じでなければなりませんか?

理論的にはフラグメントを取得しますが、それらを実装しようとすると、レンガの壁にぶつかり続けます。私がやりたいことは、実行時に同じフラグメントの x 個のインスタンスを (linearlayout コンテナーに) 追加できるようにすることですが、同時にシステムに状態情報の維持を任せることです。それは可能ですか、それともこれがどのように機能するかについて基本的な何かが欠けていますか?

4

2 に答える 2

0

結局そこにたどり着きました。したがって、私の元の質問に対する答えは「はい」です。システムは、動的に追加されたフラグメントの状態情報を記憶しています-正しく行えば。

正しく行うとは、次のことを意味します。 a) 異なる「リソース バケット」で同じ名前のレイアウト ファイルを使用します。b) 特定のフラグメント (またはフラグメント) のすべてのコンテナ ID が、さまざまなレイアウト ファイルのすべてで同じであることを確認します。つまり、フラグメントは 1 つのコンテナー ID にのみ関連付けることができますが、その ID は多くのレイアウト ファイルに表示できます。ID 自体のみが同じでなければならないことがわかりました。コンテナとして使用されるビューグループのタイプは、フラグメントに関連しない他のものと同様に、レイアウト ファイル間で異なる場合があります。c) onCreate メソッドでは、フラグメントをインスタンス化し、それらを (フラグメント トランザクションを介して) コンテナに 1 回追加するだけです (つまり、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 に答える