1

私は aFragmentActivityと 2 つFragmentの sを持っています。たとえば、 FrgMaster(a ListFragment) とFrgDetail. 2 つのレイアウト XML ファイルがありFrameLayoutますFrameLayout。フラグメントをインスタンス化したいFragmentActivityので、onCreate()次のようなものがあります。

if (savedInstanceState == null) {
    final FrgMaster fragment = new FrgMaster();
    // Add the fragment to the FrameLayout
    this.getSupportFragmentManager()
            .beginTransaction()
            .add(R.id.frame_for_master, fragment, FrgMaster.MY_TAG)
            .commit();
}

リストをブラウズして、場所をクリックします。ここで、向きを変更すると、上記のコードは機能しませsavedInstanceStatenull。したがって、フラグメントはレイアウトに追加されません。条件を削除すると、if向きの変更ごとに 1 つずつ、複数のフラグメントが積み重なってしまいます。

私は何が欠けていますか?

4

1 に答える 1

2

レイアウト ファイルにフラグメントへのリンクを含めているかどうかは不明です。そうであれば、 beginTransacton().add(x).commit() 部分はまったく必要ありません。

XML にフラグメントを追加せず、コードにのみ追加すると仮定すると、コードを次のように変更することでいくらかのマイレージが得られる可能性があります。

FragmentManager manager = this.getSupportFragmentManager();
FrmMaster fragment = manager.findFragmentById(FrgMaster.MY_TAG);
if (fragment == null)
{
    manager
        .beginTransaction()
        .add(R.id.frame_for_master, fragment, FrgMaster.MY_TAG)
        .commit();
}

編集:OPのスタイルに従うように構文を変更しました

于 2013-03-05T01:04:07.493 に答える