Скажем, у меня есть действие, в котором фрагменты добавлены программно:
private void animateToFragment(Fragment newFragment, String tag) {
FragmentTransaction ft = getFragmentManager().beginTransaction();
ft.replace(R.id.fragment_container, newFragment, tag);
ft.addToBackStack(null);
ft.commit();
}
Каков наилучший способ вернуться к предыдущему фрагменту, который был виден?
Я обнаружил, что функциональность Trigger back-button при нажатии кнопки в Android, но я думаю, что имитация события back back не является правильным способом (и я тоже не могу заставить его работать):
dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_BACK));
Звонок finish()
просто закрывает занятие, которое мне не интересно.
Есть ли лучший способ сделать это?
android
android-fragments
back-stack
Аске Б.
источник
источник
getFragmentManager().popBackStackImmediate();
сделал свое дело. Спасибо.Чтобы уточнить другие предоставленные ответы, это мое решение (помещено в упражнение):
источник
fm.getBackStackEntryCount() > 1
, чтобы отозвать действие, когда в стеке есть только первый фрагмент.Когда мы обновляем / добавляем фрагменты,
Должен включать
.addToBackStack()
.После этого, если мы дадим
getFragments.popBackStackImmediate()
, вернется true, если мы добавим / обновим фрагменты и вернемся к текущему экрану.источник
Добавьте эти строки в ваш метод onBackPressed (). Метод popBackStackImmediate () вернет вас к предыдущему фрагменту, если у вас есть какой-либо фрагмент в заднем стеке `
`
источник
Это решение отлично работает для навигации по фрагментам в нижней строке, когда вы хотите закрыть приложение при обратном нажатии в основном фрагменте.
С другой стороны, когда вы открываете вторичный фрагмент (фрагмент во фрагменте), который в моем коде определен как «DetailPizza», он вернет предыдущее состояние первичного фрагмента. Ура!
Внутри деятельности на спине нажми поставь вот это:
И запустите другой фрагмент так:
источник
Эти ответы не работают, если у меня нет addToBackStack (), добавленной к моей транзакции фрагмента, но вы можете использовать:
от любого вашего фрагмента, чтобы вернуться на один шаг назад;
источник
Программно вернуться к предыдущему фрагменту, используя следующий код.
источник
Чтобы сделать этот фрагмент снова, просто добавьте этот фрагмент в backstack, который вы хотите вернуть обратно нажатием, например:
В приведенном выше случае, я открываю,
LoginFragment
когдаButton button
нажата, прямо сейчас пользователь находится вSignupFragment
. Итак, еслиaddToBackStack(TAG)
вызывается, гдеTAG = "SignupFragment"
, то, когда нажата кнопка «назад»LoginFragment
, мы возвращаемся кSignUpFragment
.Удачного кодирования!
источник
Добавляя
fragment_tran.addToBackStack(null)
последний фрагмент, я могу вернуться к последнему фрагменту.добавление нового фрагмента :
источник
Я пришел сюда в поисках или той же идеи, и в то же время я придумал собственную, которая, я считаю, не так уж плоха и работает, если с ViewPager.
Итак, что я сделал, это переопределил метод onBackPressed в родительском действии, которое содержит viewPager, и установил его так, чтобы он всегда возвращался назад минус 1 позиция, пока не достигнет первого фрагмента, а затем закроет действие.
Это может иметь недостатки, как если бы он возвращался назад только в одну сторону каждый раз, так что он может работать не очень хорошо, если есть вкладки и вы переключаете позиции с пропущенными фрагментами (переход от 0 до 2, а затем нажатие назад приведет вас к 1 вместо 0)
В моем случае, с двумя фрагментами в viewPager без вкладок, он прекрасно справляется со своей задачей.
источник
Попробуйте код ниже:
источник