10

2 ページを含むアクティビティにビューページャーを追加しました。

アクティビティの onCreate で、fragmentAdapter にフラグメントを追加します。

public void onCreate(Bundle savedInstanceState)
{
    ......

    FragmentAdapter fragmentAdapter = new FragmentAdapter
    (
        getSupportFragmentManager(),
        new Fragment[]{FragmentGame.builder(id), FragmentComments.builder(id)},
        new String[]{getString(R.string.gameInfo), getString(R.string.comments)}
    );

    ViewPager viewPager = (ViewPager) findViewById(R.id.viewPager);
    viewPager.setAdapter(fragmentAdapter);

public static FragmentGame builder(long id)
{
    FragmentGame fragmentGame = new FragmentGame();

    // fragmentGame.id = id;

    Bundle bundle = new Bundle();
    bundle.putLong(Constants.EXTRA_ID, id);
    fragmentGame.setArguments(bundle);

    return fragmentGame;
}

そのアクティビティが初めて作成されると、フラグメントのonCreateViewが期待どおりに呼び出されます。

奇妙な動作は、画面が初めて回転したときにフラグメントのonCreateViewが 2 回呼び出されたが、2 回目の呼び出しには正しいIDしかなく、最初の呼び出しIDは 0 であるということです。

2 回目の画面回転では、onCreateViewが 3 回呼び出され、最後の 1 つだけが id を持ちます。

画面の回転が増えると、onCreateView呼び出しが増加します。

フラグメントと画面の回転に関する関連する質問を見つけましたが、なぜこれが起こるのか、正しい方法でそれを行う方法がわかりません。

- - - アップデート - - -

バンドルを直接値設定に置き換えたので、ID の問題は解決しました。

4

2 に答える 2