2

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

我的问题在于“向上导航”、回栈行为和将片段放在前面时对片段的一般“重新绘制”。

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

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

activity.getSupportActionBar().setDisplayHomeAsUpEnabled(true);

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

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

我必须说,我认为 Fragment 的 Android 开发页面几乎是在说生命周期:

“管理片段的生命周期很像管理活动的生命周期”

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

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

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

谢谢你的帮助!

4

1 回答 1

0

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

问题

未调用主屏幕的 onResume 方法。

在查看活动生命周期和片段生命周期:它突出显示“只有在调用活动 onResume() 或 onPause() 时才会调用片段 onResume() 或 onPause()。”

转到此处:第 2 段

这应该让您了解为什么主屏幕中的 onResume() 方法没有被调用。我不会自己实现这个,但为了提供解决方案,我会清除后台堆栈(为了记忆)并在用户尝试进入主屏幕/主屏幕时实例化一个新的 homeScreen Activity,或者我自己的解决方案是重写部分您的应用程序再次不需要为此使用片段。

编程实践

使用多个片段时要小心使用片段,除非您应该使用高技能和知识渊博的 android API 在一个屏幕上显示多个视图。用例包括更大的屏幕(表格、额外信息等)。

已经报告了许多白屏问题是因为用碎片轰炸应用程序并弹出到后台堆栈,所以要厌倦。

于 2015-03-08T21:54:23.203 回答