0

横向きモードでは 2 つのフラグメントがあり、縦向きモードでは 1 つのフラグメントがあります。上記のフラグメントをxmlメソッドを介してロードしています。とにかく、最初のアクティビティで 2 番目のフラグメントの存在を確認し、2 番目のフラグメントのアクティビティを起動するか、2 番目のフラグメントで直接メソッドを呼び出します。すべて正常に動作しますが、ユーザーが最初にローテーション (2 つのフラグメントを作成) してからローテーションを戻すと、2 番目のフラグメントのチェックが null ではなくなり、バックスタックに追加されたときにロジックが壊れます。

これを解決するには?おそらく onPause() の履歴スタックからフラグメントを削除する必要がありますか? または、2 番目のフラグメントが何らかの方法でバックスタックに追加されないようにすることもできます。

最初のアクティビティ:

public void onClick(View view) {    
    SecondFragment secondFragment = (SecondFragment) getSupportFragmentManager().findFragmentById(R.id.second_fragment);

    if (secondFragment != null) { // * this will no longer be not null after rotating
        // two pane layout : update second fragment
        secondFragment.updateSecondFragmentView();
    } else {
        // one pane layout : start second activity
        Intent intent = new Intent(FirstActivity.this, SecondActivity.class);

        startActivity(intent);
    }
}

SecondFragment:これをお勧めしますか?

@Override
public void onPause() {
    super.onPause();

    FragmentManager fragmentManager = getActivity().getSupportFragmentManager();

    fragmentManager.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
}
4

1 に答える 1

0
if (secondFragment != null && secondFragment.isVisible()) {
    // two pane layout : update second fragment
    secondFragment.updateSecondFragmentView();
}

私の状況では、これはうまくいくようです。

于 2015-11-07T03:41:10.123 に答える