AddToBackStack не работает, закрывает активность, вместо того, чтобы возвращать фрагменты

У меня есть probleam, и я не могу найти решение нигде.

Мое приложение не возвращается к предыдущему фрагменту, когда я нажимаю кнопку «Назад», вместо этого закрывает действие.

У меня есть активность, которая отображает 4 фрагмента: [1], [2], [3], [4]. Я могу переключаться между первыми тремя фрагментами с помощью панели действий, я не хочу добавлять их в задний стек.

Фрагмент [4] – подробный вид элемента, выбранного в фрагменте [3]. Когда я вернусь в [4], я хочу вернуться к фрагменту [3], не закрывая приложение.

Переходы выполняются таким образом ПО ДЕЯТЕЛЬНОСТИ, в которой размещены фрагменты:

private void replaceFragment(Fragment fragment, boolean toBackStack){ if(fragment != null){ FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction(); fragmentTransaction.replace(R.id.container, fragment); if(toBackStack) fragmentTransaction.addToBackStack(null); fragmentTransaction.commit(); } } 

Где toBackStack всегда false, за исключением случаев, когда переход от [3] до [4].

Если я пройду toBackStack true в каждом переходе, активность все равно будет закрыта.

У меня такая же проблема. В частности, я реализую PreferenceFragment, и я хочу, чтобы кнопка назад вернула меня к тому, что было ранее загруженным фрагментом.

Похоже, что «задний стек» – это то, что не запускается автоматически с помощью кнопки «Назад системы» . Мое решение состояло в том, чтобы вручную поместить задний стек из onBackPressed override:

 @Override public void onBackPressed() { if (inSettings) { backFromSettingsFragment(); return; } super.onBackPressed(); } 

Всякий раз, когда я перехожу к фрагменту моих предпочтений, я устанавливаю inSettings boolean в true, чтобы сохранить это состояние. Вот как выглядит мой метод backFromSettingsFragment :

 private void backFromSettingsFragment() { inSettings = false; getFragmentManager().popBackStack(); } 

Итак, если вы можете отслеживать состояние, когда вы находитесь во Фрагменте [4] и перехватываете кнопку «Назад», вы должны иметь возможность ручного вызова

 getFragmentManager().popBackStack(); 

Вернуться к фрагменту [3].

Примечание: помните, что вам нужно добавить фрагмент [3] в задний стек, а не фрагмент [4]. (Если [4] не перейдет к [5], и вам также нужно вернуться к [4]).