当我打电话给getFragmentManager().popBackStack()
时,我想知道是否有任何东西被弹出。我怎么能找到这个?
我正在使用android.support.v4.app.FragmentManager
。
在android.support.v4.app.FragmentManager.popBackStack()的文档中,它说:
从顶部堆栈弹出顶部状态。如果有一个要弹出,则返回true,否则返回false。
所以根据它,它应该像这样工作:
boolean popped = getFragmentManager().popBackStack();
但这不起作用,因为popBackStack()
的返回值为void
。
这是代码中还是文档中的错误?
我尝试从getFragmentManager().getBackStackEntryCount()
计算是否弹出了任何内容:
int countBefore = getFragmentManager().getBackStackEntryCount();
getFragmentManager().popBackStack();
int countAfter = getFragmentManager().getBackStackEntryCount();
boolean popped = countAfter != countBefore;
但由于popBackStack()
的工作原理,这也不起作用:
此函数是异步的 - 它将请求排入pop,但是 在应用程序返回之前,不会执行该操作 事件循环。
所以这意味着对getBackStackEntryCount()
的两次调用都给了我相同的号码。
答案 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