Вы создаете новый экземпляр фрагмента перед его удалением; это не имеет смысла.
Ваш код должен быть (псевдокод) больше похож на:
public void back() {
if (binding.vpPager.getCurrentItem() == 1) {
binding.vpPager.setCurrentItem(0);
}
else
{
// must remove the Fragment
Fragment = f = fragmentManager.findFragmentByTag(QR_CODE_FRAGMENT_TAG);
if (f != null && f.isAttached()) {
fragmentManager
.beginTransaction()
.remove(f)
.commit();
} else {
// Fragment is not attached, nothing to do here, you can remove this code.
}
}
}
Примечание:
Имейте в виду, что commitNowAllowingStateLoss()
- опасная операция. В зависимости от того, что вы делаете, ваше состояние (иначе: транзакция) может быть потеряно , если контекст исчезает до того, как состояние обновляется, и действие уже сохранило свое состояние.
Что вам, вероятно, нужно, это commitNow()
, потому что это не операция обратного стека (недостатком commitNow является то, что вы не можете добавить транзакцию в backstack для вставки ее позже), что является ожидаемым побочный эффект, но не часто известный некоторым разработчикам:)