横向きモードでは 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);
}