Когда я запускаю приложение, он запускает AsyncTask
для загрузки, а затем в onPostExecute
, затем я setContentView
в новый макет, затем добавляю фрагмент с двумя кнопками, предлагающими два режима, с помощью добавления FragmentTransaction
. После нажатия одного из двух режимов он заменяет фрагмент еще одним FragmentTransaction
с использованием метода replace.Замененный фрагмент все еще виден
Если приложение выходит из строя, оно возвращается на первый экран, загружая две кнопки, предлагающие два режима. В этом случае, если выбран какой-либо режим, второй фрагмент загружен, но теперь фон внезапно прозрачен, показывая две кнопки ниже, и они остаются доступными для клика. Если их снова щелкнуть, они правильно заменит фрагмент так, чтобы он не был виден ниже. Это просто странно, я не могу понять, что может вызвать это.
Я исследовал и увидел эти два похожих вопроса, one и two, в которых предположилось, что это может быть из-за неправильного идентификатора или я определил фрагмент в 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();
}
Это работает в первый раз, однако, если происходит сбой, то приложение возвращается к первому фрагменту, а во второй раз этот метод передается, новый заменяющий фрагмент является полунезависимым. Нажатие кнопки на первом фрагменте снова вызывает этот метод снова, и теперь это нормально.
Очевидно, что я не хочу, чтобы приложение разбилось, так что этого не должно произойти, но я чувствую, что что-то не так с тем, как я пишу свой код.
Это должен быть комментарий, а не ответ. –
Нет, это не так, это также подходит для ответа. – Zyoo
Моя проблема заключалась в атрибуте фона в элементе HoloGraph (маленькой библиотеке для рисования диаграмм) в файле макета XML в сводке. Я удалил этот атрибут, и он сработал. Я заменил свой фрагмент после отсоединения, чтобы обновить фрагмент, но мне действительно не нужно было заменять фрагмент, мне нужно было только отсоединить, прикрепить (вызывает фрагмент onCreateView) и зафиксировать. Если у вас есть аналогичная проблема, и вы должны передать данные в свой фрагмент, я предлагаю изменить, где вы храните данные из пакета фрагмента в некоторые поля в другом классе. Получите доступ к ним в onCreateView фрагмента. – Metallica