addToBackStack具有null参数的含义是什么?

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

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

例如 – 片段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() ,它运行没有任何问题。

Solutions Collecting From Web of "addToBackStack具有null参数的含义是什么?"

addToBackStack(null)跟commit()是什么意思?

引用文档

通过调用addToBackStack(),将replace事务保存到后退堆栈,以便用户可以通过按下“后退”button来反转事务并返回前一个片段。

如果您为事务添加了多个更改(例如add()或remove())并调用addToBackStack(),则在调用commit()之前应用的所有更改将作为单个事务添加到后端堆栈,将一起扭转他们。

您将更改添加到FragmentTransaction的顺序并不重要,除了:

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

所以你最后承诺。

为什么你需要传递一个空参数addToBackStack?

它不一定是null,它可以是一个string。 如果你不想只传递null

 public abstract FragmentTransaction addToBackStack (String name) Added in API level 11 Add this transaction to the back stack. This means that the transaction will be remembered after it is committed, and will reverse its operation when later popped off the stack. Parameters name An optional name for this back stack state, or null. 

看起来像这样的代码是没用的,因为我运行的代码没有最后一行.addToBackStack(null).commit(),它运行没有任何问题

如果要导航到前一个片段,请将其添加到backstack中。 所以这取决于你是否想要将片段添加到后台堆栈中。

如何得到这个片段后,像这样添加?

你已经有了片段实例firstFragment 。 所以我以后不知道你的意思

更多信息 @

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

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

您的答案已被弃用。 如果你不想添加碎片到堆栈,你应该使用下面的代码片段:

  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(); } 

下面你有可爱的例子如何使用它:

 GameFragment fragment = GameFragment.newInstance(mGameObject, currentQuestion); ActivityUtils.replaceFragment(getFragmentManager(), fragment, R.id.main);