如何知道FragmentManager的后台堆栈是否弹出任何东西?

时间:2017-09-11 18:24:31

标签: android android-fragments

当我打电话给getFragmentManager().popBackStack()时,我想知道是否有任何东西被弹出。我怎么能找到这个?

我正在使用android.support.v4.app.FragmentManager

我尝试了什么

方式1:返回值

android.support.v4.app.FragmentManager.popBackStack()的文档中,它说:

  

从顶部堆栈弹出顶部状态。如果有一个要弹出,则返回true,否则返回false。

所以根据它,它应该像这样工作:

boolean popped = getFragmentManager().popBackStack();

但这不起作用,因为popBackStack()的返回值为void

这是代码中还是文档中的错误?

方式2:返回堆栈计数

我尝试从getFragmentManager().getBackStackEntryCount()计算是否弹出了任何内容:

int countBefore = getFragmentManager().getBackStackEntryCount();
getFragmentManager().popBackStack();
int countAfter = getFragmentManager().getBackStackEntryCount();

boolean popped = countAfter != countBefore;

但由于popBackStack()的工作原理,这也不起作用:

  

此函数是异步的 - 它将请求排入pop,但是   在应用程序返回之前,不会执行该操作   事件循环。

所以这意味着对getBackStackEntryCount()的两次调用都给了我相同的号码。

问题

  1. 如何查看是否弹出了任何内容?
  2. 我在方式1中描述的内容:是Android代码中的错误还是Android的文档?
  3. 如果它是一个错误:我怎么能告诉他们,有什么东西混淆了? (我之所以这样问,是因为我曾经尝试在他们的Android文档中修复错误,但直到今天他们从未合并我的pull request

1 个答案:

答案 0 :(得分:1)

问题:如何查看是否弹出了任何内容?

弹出堆栈有两种方法:

  • void popBackStack()
  

从顶部堆栈弹出顶部状态。此函数是异步的 - 它将请求排入pop,但在应用程序返回其事件循环之前不会执行该操作。

  • boolean popBackStackImmediate()
  

popBackStack()类似,但会立即在通话中执行操作。这就像之后调用executePendingTransactions()而不强制推迟推迟交易一样。

后者似乎就是你要找的那个。

如果您需要始终观察更改,可以onStart onStop addOnBackStackChangedListener并在<?xml version="1.0" encoding="UTF-8"?> <jboss-web version="8.0" xmlns="http://www.jboss.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.jboss.org/j2ee/schema/jboss-web_8_0.xsd"> <!-- browser tend to not send encoding information, so we have to match the servlet container's default encoding with our requested form data encoding: --> <default-encoding>UTF-8</default-encoding> </jboss-web> 取消注册。

问题:我所描述的方式1:Android代码或Android文档中的错误是什么?

docs中的快速浏览显示了具有适当描述的两种方法。 Support library看起来也完好无损。这可能是你的疏忽。

编辑:好的,我看得太快了。它确实说&#34;从背堆中弹出顶级状态。 如果有一个要弹出,则返回true,否则返回false。此函数是异步的[...]&#34;。这当然是错误的。

问题:如果它是一个错误:我怎么能告诉他们,有什么东西混在一起?

GitHub repo只是一面镜子。 Android开发团队不会去那里合并拉取请求。如果您想捐款,请使用AOSP gerrit。更多信息:https://source.android.com/source/contributing

或者,您可以在此处提交错误报告:https://issuetracker.google.com/issues