有没有办法找出返回堆栈发生了什么?
Is there a way to find out what has happened to the back stack?
在我的 Android 活动中,我使用 FragmentManager.OnBackStackChangedListener()
来监听片段返回堆栈的变化。
OnBackStackChangedListener
只有一种方法 onBackStackChanged()
,但不传递有关更改的信息。
有没有办法收集这些信息?
具体来说,我想知道我之前添加的片段是否被这个返回堆栈更改删除了。
一种选择是使用 popBackStack
手动从返回堆栈中检索信息;您可以从堆栈中弹出最新状态,也可以通过指定名称或 ID 搜索特定状态。
因此,为了回答您的问题,您可以创建后退堆栈的本地副本,然后当 onBackStackChanged()
被调用时,您可以将保存的后退堆栈副本与当前后退堆栈进行比较,看看有什么不同改变了。
实现此目的的一种方法是使用 FragmentManager.enableDebugLogging(true);
(您可以将其放在 Application
的 onCreate 中)。通过此调试,您不仅可以查看片段的各种生命周期事件,还可以查看有关后台堆栈更新的信息。
@Override
public void onCreate() {
super.onCreate();
FragmentManager.enableDebugLogging(true);
}
在我的 Android 活动中,我使用 FragmentManager.OnBackStackChangedListener()
来监听片段返回堆栈的变化。
OnBackStackChangedListener
只有一种方法 onBackStackChanged()
,但不传递有关更改的信息。
有没有办法收集这些信息?
具体来说,我想知道我之前添加的片段是否被这个返回堆栈更改删除了。
一种选择是使用 popBackStack
手动从返回堆栈中检索信息;您可以从堆栈中弹出最新状态,也可以通过指定名称或 ID 搜索特定状态。
因此,为了回答您的问题,您可以创建后退堆栈的本地副本,然后当 onBackStackChanged()
被调用时,您可以将保存的后退堆栈副本与当前后退堆栈进行比较,看看有什么不同改变了。
实现此目的的一种方法是使用 FragmentManager.enableDebugLogging(true);
(您可以将其放在 Application
的 onCreate 中)。通过此调试,您不仅可以查看片段的各种生命周期事件,还可以查看有关后台堆栈更新的信息。
@Override
public void onCreate() {
super.onCreate();
FragmentManager.enableDebugLogging(true);
}