4

私はフラグメントを研究しており、記事のマスター詳細の例を使用して、ドキュメントのチュートリアルを確認しました。記事タイトル用の 2 つのフラグメントがあり、選択すると記事の詳細ビューが表示されます (マルチペイン レイアウト)。onCreate メソッド内でsavedInstancestateをチェックする理由の1つの小さな部分を除いて、チュートリアルのほとんどを取得します。

私の質問は、コンテナアクティビティの onCreate() メソッドについてです。このチェックがあります

 if (savedInstanceState != null) {
                return;
            }

これを削除すると、UI でフラグメントが重なります。だから私はそれがこれを防ぐことを知っていますが、理由はわかりませんか? 誰かにこれを説明してもらいたい。

前もって感謝します。

編集:完全な方法

 public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.news_articles);

    // Check whether the activity is using the layout version with
    // the fragment_container FrameLayout. If so, we must add the first fragment
    if (findViewById(R.id.fragment_container) != null) {

        // However, if we're being restored from a previous state,
        // then we don't need to do anything and should return or else
        // we could end up with overlapping fragments.
        if (savedInstanceState != null) {
            return;
        }

        // Create an instance of ExampleFragment
        HeadlinesFragment firstFragment = new HeadlinesFragment();

        // In case this activity was started with special instructions from an Intent,
        // pass the Intent's extras to the fragment as arguments
        firstFragment.setArguments(getIntent().getExtras());

        // Add the fragment to the 'fragment_container' FrameLayout
        getSupportFragmentManager().beginTransaction()
                .add(R.id.fragment_container, firstFragment).commit();
    }
}
4

2 に答える 2

4

わかった。

ポイントは、アクティビティが画面の回転動作によって破棄された場合、アクティビティに含まれるフラグメントが自動的に保存されるということです。

そのため、アクティビティが以前の状態 (画面の回転) から復元されると、onCreate() メソッドが再度呼び出されます。つまり、画面が回転したときにフラグメントが再度追加されます (上記のコードに従って)。そのため、ローテーションから復元された場合は onCreate() メソッド内でチェックするif (savedInstanceState != null) 必要があるため、フラグメントを再度追加する必要はなく、何もしません。

于 2013-09-10T18:05:52.390 に答える
3

savedInstanceState は、最後に保存された状態をチェックします。

Android では、デバイスを回転させたり、別の Activity から戻ったりするたびに、 onCreate>onStart>onResume などのように、Android の一般的なライフ サイクルが開始されます。これは、アクティビティ全体が新たに開始されることを意味します。

しかし、savedInstanceState では、保存したか使用していた UI の最後の状態を取得します。

于 2013-09-10T11:23:26.620 に答える