この特定の問題にはいくつかの答えがあることは知っていますが、どれも解決に役立ちませんでした。
ドロワー ナビゲーション (Mike Penz ドロワー ナビゲーション) を持つアプリケーションに取り組んでいます。いずれかの項目を選択すると、ユーザーは対応するフラグメントに移動します。フラグメントは完全に機能し、向きが変わっても状態を維持します。ただし、フラグメントの 1 つには、現在のフラグメントを新しいフラグメントに置き換えるボタンがあります。新しいフラグメントが画面に表示されているときに、ユーザーがデバイスの向きを変更すると、前のフラグメントが表示されます。
プロセス: ドロワー アイテムの選択 > フラグメント A > ボタン > フラグメント B > 方向の変更 > フラグメント A。
編集: これは最初のフラグメントが呼び出される方法です:(スイッチ)
case R.string.drawer_item_a:
FragmentA A = FragmentA.newInstance();
getSupportFragmentManager().beginTransaction()
.replace(R.id.container, A)
.commit();
break;
2 番目のフラグメントは次のように呼び出されます。
@Override
public void onClick(View v) {
FragmentManager fm = getActivity().getSupportFragmentManager();
FragmentB B = FragmentB.newInstance();
fm.beginTransaction()
.replace(R.id.container, B, String.valueOf(R.string.settings_pin_request))
.commit();
}
引き出し
result = new Drawer()
.withActivity(this)
.withToolbar(mToolbar)
.withActionBarDrawerToggle(true)
.addDrawerItems(
new PrimaryDrawerItem().withName("FragmentA"),
new PrimaryDrawerItem().withName("FragmentB")
)
.withOnDrawerItemClickListener(new Drawer.OnDrawerItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id, IDrawerItem drawerItem) {
if (drawerItem instanceof Nameable) {
mCurrentDrawerItem = position;
// Display appropriate fragment
switch (((Nameable) drawerItem).getNameRes()) {
case R.string.drawer_item_a:
FragmentA A = FragmentA.newInstance();
getSupportFragmentManager().beginTransaction()
.replace(R.id.container, A)
.commit();
break;
case R.string.drawer_item_b:
FragmentA A = FragmentA.newInstance();
getSupportFragmentManager().beginTransaction()
.replace(R.id.container, A)
.commit();
break;
}
mToolbar.setTitle(MainActivity.this.getString(((Nameable) drawerItem).getNameRes()));
}
}
}).build();
// Set the current drawer item
result.setSelection(mCurrentDrawerItem);
onResume() メソッドは、ユーザー同期のロジックを実装します。フラグメント状態については何も書かれていません。