FrameLayoutでホルダーアクティビティを使用します。
そこにリストビューのあるフラグメントを置きました。正常に動作します。
ft = getSupportFragmentManager().beginTransaction();
ft.add(R.id.fragments, feedFragment);
ft.commit();
次に、別のフラグメントを追加します。
android.support.v4.app.Fragment targetFragment = new MainPhotoFragment();
ft = getSupportFragmentManager().beginTransaction();
ft.add(R.id.fragments, targetFragment);
ft.addToBackStack(null);
ft.commit();
ここでは、replace()の代わりにadd()を使用して、キーを押したときにリストビューの前の位置に戻ります。正常に動作します。
ただし、2番目のフラグメントから3番目のフラグメントに移動することは可能です。
android.support.v4.app.Fragment targetFragment = new FullPhotoFragment();
ft = getSupportFragmentManager().beginTransaction();
ft.replace(R.id.fragments, targetFragment);
ft.addToBackStack(null);
ft.commit();
ここでは、replaceを使用して、キーを押したときに2番目のフラグメントを強制的にリロードします。
3番目のフラグメントのバックキーが正常に機能する場合があります。表示時にリロードされている2番目のフラグメントが表示されます。
しかし、時々(この手順を試したときに初めて発生することがわかります)、3番目のフラグメントからキーを押し戻すと、最初のフラグメントに移動し、予想に反して2番目のフラグメントを閉じます。そして、最初のフラグメントはリロードです。
この奇妙な振る舞いを防ぐ方法は?