У меня есть код клиента. Существует только одно действие для всех фрагментов, т.е. одно действие управляет всеми фрагментами.
Это действие содержит следующий код для любого фрагмента в конце метода этого фрагмента:
Например - фрагмент MoreFragment:
MoreFragment firstFragment = new MoreFragment();
getSupportFragmentManager().beginTransaction()
.replace(R.id.article_fragment, firstFragment)
.addToBackStack(null).commit();
Так,
1) Что означает, за addToBackStack(null)
которым следует а commit()
?
2) Почему вам нужно передать нулевой параметр addToBackStack
?
3) Как получить этот фрагмент после такого добавления?
Похоже, этот код бесполезен, поскольку я запускал код без последней строки, .addToBackStack(null).commit()
и он работал без каких-либо проблем.
android
android-fragments
О Господи
источник
источник
Ответы:
Цитата документов:
Порядок, в котором вы добавляете изменения в FragmentTransaction, не имеет значения, за исключением:
Вы должны позвонить
commit()
последним. Если вы добавляете несколько фрагментов в один и тот же контейнер, то порядок, в котором вы добавляете их, определяет порядок, в котором они отображаются в иерархии представлений.Так что вы должны в конце концов совершить.
Необязательно иметь значение NULL, это может быть строка. Если не хотите, просто передайте null.
Что касается:
Если вы хотите перейти к предыдущему фрагменту, добавьте его в стопку. Так что это зависит от того, хотите ли вы добавить фрагмент в backstack.
У вас уже есть экземпляр фрагмента
firstFragment
. Так что я не понимаю, что вы имеете в виду, говоря получить фрагмент позже.Дополнительная информация @
http://developer.android.com/guide/components/fragments.html
http://developer.android.com/reference/android/app/FragmentTransaction.html#addToBackStack(java.lang.String)
источник
getFragmentManager().popBackStackImmediate()
если кнопка возврата может делать это сама по себе с / без передачи параметра? См. Ответ - stackoverflow.com/questions/21156153/…tag
Строка вaddToBackStack(String name)
дает способ найти стек обратно на потом выскочить прямо на этом месте. Он предназначен для использования в методеpopToBackStack(String name, int flags)
:Другими словами, он будет выталкивать ваш задний стек, пока не найдет фрагмент, который был добавлен
name
вaddToBackStack(String name)
.Например, если вы выполняете серию добавлений или замен в диспетчере фрагментов, задавая имена "frag1", "frag2", "frag3", "frag4", а затем хотите вернуться непосредственно к фрагменту 2, добавленному с помощью addToBackStack (" frag2 "), вы звоните
popToBackStack("frag2", 0)
.Так,
Использование
.addToBackStack("fragName")
: если вы хотите позжеpopToBackStack(String name, int flags)
вытащить более одной задней стопки.Использование
.addToBackStack(null)
: Если вы не хотите, чтобы позже выскакивали более одной задней стопки, но все же хотите выталкивать по одной за раз. Сделайте это, даже если вы не будете явно вызывать popToBackStack (), а вместо этого позволите реализации по умолчанию для обратной печати обрабатывать задний стек.Использование
.disallowAddToBackStack()
: Если вы не хотите, чтобы ни обратное нажатие, ни вызов popBackStack () явно не выполнялись. Он будет следить за тем, чтобы ни одна часть кода не использовала .addToBackStack ().источник
Ваши ответы устарели. Если вы не хотите добавлять фрагменты в задний стек, вам следует использовать приведенный ниже фрагмент кода:
public static void replaceFragment (@NonNull FragmentManager fragmentManager, @NonNull Fragment fragment, int frameId){ checkNotNull(fragmentManager); checkNotNull(fragment); FragmentTransaction transaction = fragmentManager.beginTransaction(); transaction.replace(frameId, fragment); transaction.disallowAddToBackStack(); // <-- This makes magic! transaction.commit(); }
Ниже у вас есть симпатичный пример того, как его использовать:
источник
disallowAddToBackStack
, то любые будущие вызовы в addToBackStack выбросит IllegalStateException. Если addToBackStack уже был вызван, этот метод вызовет исключение IllegalStateException.