У меня довольно уникальная проблема, когда я пытаюсь получить предыдущий фрагмент, который был там до того, как я перешел на домашний экран через текущий фрагмент (последний видимый фрагмент)
Чтобы больше не путать, вот шаги, чтобы воспроизвести мою проблему
1) запустить основное действие, оттуда открыть фрагмент A нажатием кнопки (скажем, кнопка A)
2) от фрагмента A, нажмите другую кнопку, скажем, B, которая откроет фрагмент B.
3) Фрагмент B имеет кнопку закрытия и сохранения, нажатие которой возвращает меня к предыдущему фрагменту backstack A (activity.backpressed ())
4) Теперь у меня есть сценарий, в котором я вызываю фрагмент B, нажимая кнопку B. После нажатия кнопки «Сохранить и закрыть», если я сразу же нажимаю кнопку «Домой» и возвращаюсь в фоновый режим и возвращаюсь обратно в приложение, оно перезапускается. приложение запускает mainacctivity повсюду, вместо открытия фрагмента A (который был желаемым фрагментом).
Вот мой код:
Это мой общий код для открытия фрагментов:
public void openFragment(@NonNull Fragment fragment, String tag) {
Fragment f = getSupportFragmentManager().findFragmentByTag(tag);
if (f != null) return;
getSupportFragmentManager()
.beginTransaction()
.setCustomAnimations(R.anim.slide_up, R.anim.slide_bottom, R.anim.slide_up, R.anim.slide_bottom)
.add(R.id.cl_root_view, fragment, tag)
.addToBackStack(tag)
.commit();
}
При нажатии кнопки B я вызываю ее следующим образом:
openFragment( FragmentB.newinstance(), fragmentB.TAG);
Как только фрагмент B открывается, я обновляю свои данные и нажимаю сохранить и закрыть:
@OnClick(R.id.saveAndClose)
void onSaveClick() {
// update the contents
closeFragment();
}
protected void closeFragment() {
Activity activity = getActivity();
hideKeyboard();
if (activity != null) {
activity.onBackPressed();
}
}
Как вы можете видеть, проблема заключается в том, что данные сохраняются, как и ожидалось, но если я нажму кнопку «Домой», прямо перед завершением процесса сохранения и извлечением фрагмента (с помощью возврата), при повторном открытии экрана / или возобновлении, вместо просмотра фрагмента А (который был основным вызывающим фрагментом) приложение перезапускается. (Я знаю, что проблема возникает из-за того, что активность одинакова для всех этих фрагментов и вызывается активность. OnBackPressed (); кажется, что все в стеке разрушено, и после возобновления приложения кажется, что оно вызывает операцию еще раз вместо последний фрагмент в backstack). Есть идеи, как это сделать?
Я пробовал разные решения для похожих проблем в Интернете, но ничего не помогло, я не смог найти ни одной проблемы, похожей на мою. Кроме того, при сохранении состояния экземпляра и сохранении состояния экземпляра, похоже, не получается. любые идеи или предложения будут действительно полезны! спасибо!