带有null参数的addToBackStack是什么意思?

My *_*God 77 android android-fragments

我有一个客户代码.所有片段只有一个活动,即单个活动管理所有片段.

此活动包含该片段方法末尾的任何片段的以下代码 -

例如 - 片段MoreFragment:

MoreFragment firstFragment = new MoreFragment();
getSupportFragmentManager().beginTransaction()
.replace(R.id.article_fragment, firstFragment)
.addToBackStack(null).commit();
Run Code Online (Sandbox Code Playgroud)

所以,

1)addToBackStack(null)后面跟一个是什么意思commit()

2)为什么需要传递null参数addToBackStack

3)如何在这样添加之后获取该片段?

似乎这个代码没用,因为我运行没有最后一行的代码.addToBackStack(null).commit(),它运行没有任何问题.

Rag*_*dan 95

addToBackStack(null)后跟commit()的含义是什么?

引用文档:

通过调用addToBackStack(),替换事务将保存到后台,因此用户可以通过按"返回"按钮来反转事务并恢复前一个片段.

如果您向事务添加多个更改(例如另一个add()或remove())并调用addToBackStack(),则在调用commit()之前应用的所有更改都将作为单个事务和Back按钮添加到后台堆栈中将它们全部扭转.

将更改添加到FragmentTransaction的顺序无关紧要,除了:

你必须拨打commit()最后一个.如果要将多个片段添加到同一容器中,则添加它们的顺序将决定它们在视图层次结构中的显示顺序.

所以你必须在最后提交.

为什么需要将null参数传递给addToBackStack?

它不需要为null,它可以是一个字符串.如果你不想要,只需传递null.

public abstract FragmentTransaction addToBackStack(String name)

在API级别11中添加将此事务添加到后台堆栈.这意味着事务将在提交后被记住,并在稍后从堆栈中弹出时将反转其操作.

参数name此后备堆栈状态的可选名称,或null.

关于:

看起来这个代码没用,因为我运行的代码没有最后一行.addToBackStack(null).commit()并且运行时没有任何问题

如果要导航到上一个片段,请将其添加到backstack.所以这取决于你是否要将片段添加到backstack.

如何在这样添加之后获取该片段?

您已经拥有了片段实例firstFragment.所以我不知道你的意思是稍后获取片段.

更多信息 @

http://developer.android.com/guide/components/fragments.html

http://developer.android.com/reference/android/app/FragmentTransaction.html#addToBackStack(java.lang.String)


All*_*oso 7

中的tag字符串addToBackStack(String name)提供了一种定位后置堆栈的方式,以便以后直接弹出到该位置。它打算在该方法中使用popToBackStack(String name, int flags)

从管理器的片段回栈中弹出最后一个片段过渡。此函数是异步的-使请求弹出,但应用程序返回其事件循环之前将不执行操作。

name:如果非null,则为要查找的前一个返回状态的名称;如果找到,则将弹出该状态之前的所有状态。POP_BACK_STACK_INCLUSIVE标志可用于控制是否弹出指定状态。如果为null,则仅弹出最高状态。

标志:0或POP_BACK_STACK_INCLUSIVE。

换句话说,它将弹出堆栈,直到找到namein 所添加的片段addToBackStack(String name)

例如,如果您对片段管理器进行一系列添加或替换,并给其命名为“ frag1”,“ frag2”,“ frag3”,“ frag4”,后来又想直接回到使用addToBackStack(“ frag2“),您致电popToBackStack("frag2", 0)

所以,

  • .addToBackStack("fragName")如果您以后popToBackStack(String name, int flags)想要弹出多个后退堆栈,请使用:。

  • 使用.addToBackStack(null):如果您不希望以后弹出多个后退堆栈,但仍然想一次弹出一个。即使您不会显式调用popToBackStack(),也要执行此操作,而是让后按默认实现处理后堆栈。

  • 使用.disallowAddToBackStack():如果您不希望后按或显式调用popBackStack()。它将确保代码的任何部分都没有使用.addToBackStack()。