Я изучаю, как правильно использовать фрагменты. У меня есть 4 фрагмента:FragmentManager.popBackStack() добавляет фрагмент ниже текущего
- B
- Загрузка
- Полная
Он должен сменяют друг друга в этой последовательности:
==>Загрузка ==>B ==>Загрузка ==>Полная
Метод, который изменит мою Fragment А в Загрузка:
LoadingFragment loadingFragment = new LoadingFragment();
Bundle bundle = new Bundle();
bundle.putBoolean("fragmentA", true);
loadingFragment.setArguments(bundle);
getFragmentManager().beginTransaction()
.replace(R.id.fragment_container, loadingFragment)
.addToBackStack(null)
.commit();
Изменение Фрагмент B в Загрузка выглядит аналогично (только аргументы изменяются, очевидно)
Метод, которые изменяются Загрузка фрагмента в фрагмент B:
new Thread(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
getFragmentManager().beginTransaction()
.replace(R.id.fragment_container, new FragmentB())
.commit();
}
}).start();
Thread.sleep (...) - это просто длинная операция ... На этот раз я не добавляю .addToBackStack(null)
.
Хорошо. Теперь проблема:
Когда я использую метод getFragmentManager().popBackStack()
, предыдущий фрагмент (А) добавляют ниже (мой фрагмент контейнер LinearLayout) мой фактический фрагмент вместо replaceing его. В соответствии с этим: https://stackoverflow.com/a/17793959/3279023 он должен работать, но это не так.
Я знаю это ... но 'addToBackStack()' метод должен помнить всю транзакцию и выполнять и инвертировать это – Lau