Итак, есть некоторые подобные вопросы, но я не нашел ни одного, кто решает эту проблему. Официальная официальная документация по Android для кажется интуитивной, но когда я реализую приложение с более сложным рабочим процессом, фрагменты backstack становятся беспорядочными, и начинает происходить странный материал. Я разработал скелет для простых приложений, с идеей одного действия, к которому можно получить доступ к его фрагментам, чтобы запустить другие фрагменты. Вот как я это сделал:
1- Я позволю своей основной деятельности реализовать интерфейс под названием "FragmentDelegate"
public interface FragmentDelegate {
public void startFragment(CCFragment fragment, boolean addToBackStack);
}
2- Реализация метода startFrargment:
@Override
public void startFragment(CCFragment fragment, boolean addToBackStack) {
FragmentManager fragmentManager = getSupportFragmentManager();
fragment.setFragmentDelegate(this);
FragmentTransaction fragmentTransaction = fragmentManager
.beginTransaction();
fragmentTransaction.setCustomAnimations(R.anim.slide_in_right,
R.anim.slide_out_left, R.anim.slide_in_left,
R.anim.slide_out_right);
fragmentTransaction.replace(CONTENT_VIEW_ID, fragment,
"callerFragmentClassName");
if (addToBackStack)
fragmentTransaction.addToBackStack("callerFragmentClassName");
fragmentTransaction.commitAllowingStateLoss();
}
Приятная вещь в этом, я могу позвонить из любого фрагмента:
mFragmentDelegate.startFragment(aNewFragment, addToBackStack);
Теперь подумайте о следующем сценарии:
Я начинаю свою деятельность с исходного фрагмента, скажем, фрагмент A. Из фрагмента A я вызываю операцию "Камера" для получения результата. Когда результат достигнет, я начинаю Fragment B (добавление A к стопке). Начиная с B, я начинаю Fragment C без, добавляя B в backstack. Итак, мы имеем это в задней части:
[A] [C]
Если я нажму кнопку "Назад", я вернусь к A. Если я повторю этот процесс, backstack перепутался, и когда я нажимаю, он снова и снова возвращает меня к фрагменту C...
Я знаю, что это трудно понять (и мне труднее объяснить, потому что английский не мой родной язык), но если кто-то может объяснить мне, как работают андроидные фрагменты backstack действительно или предоставить какой-то скелет для приложения, было бы здорово.