Замененный фрагмент все еще видимый

Когда я запускаю свое приложение, он запускает AsyncTask для загрузки, а затем в onPostExecute , затем setContentView новый макет, а затем добавляет фрагмент с двумя кнопками, предлагающими два режима добавлением FragmentTransaction . После нажатия одного из двух режимов он заменяет фрагмент еще одним FragmentTransaction с помощью метода replace.

Если приложение выходит из строя, оно возвращается на первый экран, загружая две кнопки, предлагающие два режима. В этом случае, если выбран один из режимов, второй фрагмент загружен, но теперь фон внезапно прозрачен, показывая две кнопки ниже, и они остаются доступными для клика. Если их снова щелкнуть, они правильно заменят фрагмент, чтобы он не был виден ниже. Это просто странно, я не могу понять, что может вызвать это.

Я исследовал и видел эти два похожих вопроса, один и два , которые предположили, что это может быть потому, что идентификатор неправильный или я определил фрагмент в XML. Ни один из этих двух факторов не имеет места.

Мой код показан ниже:

Ниже я заменяю экран загрузки.

 @Override protected void onPostExecute(Void result) { setContentView(R.layout.activity_main_screen); FragmentTransaction transaction = getSupportFragmentManager() .beginTransaction(); transaction.add(R.id.fragment_container, new ModeFragment()) .commit(); } 

После чего, когда нажата кнопка, я передаю фрагмент, который я хочу заменить текущим, следующим ниже:

 private void replaceCurrentFragment(Fragment fragment) { FragmentTransaction transaction = getSupportFragmentManager() .beginTransaction(); transaction.replace(R.id.fragment_container, fragment) .setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN) .addToBackStack(null).commit(); } 

Это работает в первый раз, однако, если происходит сбой, приложение возвращается к первому фрагменту, а во второй раз этот метод передается, новый заменяющий фрагмент является невидимым. Щелчок по кнопке на первом фрагменте снова вызывает этот метод снова, и теперь все в порядке.

Очевидно, я не хочу, чтобы приложение разбилось, так что этого не должно произойти, но я чувствую, что что-то не так с тем, как я пишу свой код.

Solutions Collecting From Web of "Замененный фрагмент все еще видимый"

У меня была одна и та же проблема со мной, и это произошло из-за того, что я загрузил фрагмент в OnCreate моей активности, не проверяя, был ли файл savedInstanceState, поэтому андроид сначала открывает все старые фрагменты, а затем делает OnCreate, который добавил Фрагмент над старыми, не заменяя их, поэтому, когда вы переходите к другому фрагменту, он заменяет только верхний, но не нижний, поэтому вы увидите фрагменты под ним.

Возможно, это не то же самое для вас, но это может помочь вам разобраться.