处理从backstack重新创建片段时未调用的onResume()

时间:2015-03-08 21:13:11

标签: android android-fragments android-navigation fragment-lifecycle fragment-backstack

我最近开始通过用片段替换“所有”活动来重构我的Android应用程序。在现在的状态下,它的表现比以前糟糕得多......

我的问题出现在“向上导航”,背堆行为以及片段被带到前面时的一般“重新绘制”。

所以我在我的ui中创建了一个逻辑层次的片段,当用户在主菜单中时,不应该显示“up”按钮。当用户处于任何其他片段时,向上按钮应该将用户带回主菜单。

当我开始实现这个时,我只是放了一个

activity.getSupportActionBar().setDisplayHomeAsUpEnabled(true);

在我的片段的onResume方法中。这可以按预期工作,直到主菜单从后栈(或主页导航)到达前面。然后不调用onResume()方法。

当用户在应用程序中的其他位置时,想要“重新绘制”片段似乎是大部分开发人员想要做的事情。我已经阅读了一些解决方案,基本上包括监听backstack更改,然后调用onResume()来查找即将返回的片段。这个解决方案感觉就像一个丑陋的黑客,你不应该在一个真正的应用程序中。那么大型应用程序的开发人员如何处理这个?什么是最佳做法?或者我错过了一些原则,说明如何不将自己编入这个角落?

我必须说,我认为片段的Android开发页面几乎就是关于生命周期:

“管理片段的生命周期与管理活动的生命周期非常相似”

“已恢复:片段在正在运行的活动中可见。”

此信息表示当片段从不可见变为可见时应调用onResume()。

另外,我提供导航的解决方案显然不正确,有关如何获得正确行为的任何提示?

谢谢你的帮助!

1 个答案:

答案 0 :(得分:0)

好的,实际问题非常清楚,所以我会尝试将其分解。

<强>问题

主屏幕的onResume方法未被调用。

在查看活动生命周期和片段生命周期时: 它突出显示&#34;仅当调用onResume()或onPause()时才会调用onResume()或onPause()片段。&#34;

Go here: 2nd paragraph

这应该可以让您了解为什么主屏幕中的onResume()方法没有被调用。我不会自己实现这个但是为了给出一个解决方案我会清除backstack(为了记忆)并在用户试图进入主屏幕/主屏幕时实例化一个新的homeScreen Activity或者我自己的解决方案将重写部分再次申请你不需要使用片段。

编程实践

在使用片段的许多片段时要小心,除非您应该使用熟练且知识渊博的Android API在一个屏幕上显示多个视图。用例包括更大的屏幕(表格,额外信息等。

许多白屏问题都是通过轰炸带有碎片的应用程序并弹出到后面堆栈来报告的,所以要小心。