Android 从backstack重新创建片段时未调用Handle onResume()
我最近开始重构我的Android应用程序,用片段替换“所有”活动。在目前的状态下,它的表现比以前糟糕得多 我的问题是在“向上导航”、后退行为和碎片被带到前面时的一般“重新绘制”方面 因此,我在ui中创建了一个逻辑层次的片段,当用户在主菜单中时,“up”按钮不应该显示。当用户处于任何其他片段中时,向上按钮应将用户带回主菜单 当我开始实施时,我只是把Android 从backstack重新创建片段时未调用Handle onResume(),android,android-fragments,android-navigation,fragment-lifecycle,fragment-backstack,Android,Android Fragments,Android Navigation,Fragment Lifecycle,Fragment Backstack,我最近开始重构我的Android应用程序,用片段替换“所有”活动。在目前的状态下,它的表现比以前糟糕得多 我的问题是在“向上导航”、后退行为和碎片被带到前面时的一般“重新绘制”方面 因此,我在ui中创建了一个逻辑层次的片段,当用户在主菜单中时,“up”按钮不应该显示。当用户处于任何其他片段中时,向上按钮应将用户带回主菜单 当我开始实施时,我只是把 activity.getSupportActionBar().setDisplayHomeAsUpEnabled(true); 在我的片段的onRe
activity.getSupportActionBar().setDisplayHomeAsUpEnabled(true);
在我的片段的onResume方法中。在主菜单从后堆栈(或主导航)移到前面之前,这将按预期工作。然后不会调用onResume()方法
当用户在应用程序中的其他地方时,想要“重新绘制”片段似乎是大部分开发人员想要做的事情。我读过一些解决方案,基本上包括监听backbackback更改,然后调用onResume()以获取即将返回的片段。这个解决方案感觉像一个丑陋的黑客,你不应该在一个真正的应用程序。那么大型应用程序的开发人员如何处理这个问题呢?最佳做法是什么?还是我错过了一些原则,告诉我如何不把自己编码到这个角落里
我必须说,我认为Android开发页面的碎片几乎是在撒谎,关于生命周期:
“管理片段的生命周期与管理活动的生命周期非常相似”
“已恢复:片段在正在运行的活动中可见。”
此信息意味着当片段从不可见变为可见时,应该调用onResume()
另外,我提供向上导航的解决方案显然是不正确的,有关于如何获得正确行为的提示吗
谢谢你的帮助 好的,现在还不清楚实际的问题,所以我将尝试将其分解 问题 未调用主屏幕的onResume方法 在查看活动生命周期和片段生命周期时: 它突出显示“只有在调用活动onResume()或onPause()时,才会调用片段onResume()或onPause() 这会让您了解为什么主屏幕中的onResume()方法没有被调用。我自己不会实现这一点,但为了给出一个解决方案,我会清除backbackback(为了内存),并在用户尝试进入主屏幕/主屏幕时实例化一个新的主屏幕活动,或者我自己的解决方案是再次重写应用程序的一部分,而不需要使用片段 编程实践 使用多个片段时要小心使用一个片段,除非您对android API的高度熟练和知识应该用于在一个屏幕中显示多个视图。用例包括较大的屏幕(表格、额外信息等) 据报道,许多白屏问题都是由于用碎片轰炸应用程序并弹出到后台堆栈而导致的,所以请不要感到厌倦